集合:
概念:也叫容器,理解为存储数据的。动态的存储多个对象。——元素Element
动态:集合的大小随着存储的数据的个数而改变。
对象:集合中存储的都是引用类型的数据。(对象的地址)
集合的结构:
父接口:Collection,关于集合的最基本的规则。
add()-->boolean,向集合中添加元素。
remove()-->boolean,从集合中删除指定的元素。
size()-->int,获取集合的长度。集合中存储的元素的个数
iterator()-->Iterator,获取该集合上的迭代器对象,用于遍历集合,获取里面的每一个元素。
contains()-->是否包含指定的元素。
clear()-->清空集合
addAll(),removeAll(),toArray().....
子接口:List
特点:
1、有序,有下标,有位置。
2、允许重复的元素
新增的方法:大多和下标有关
add(index,E)-->允许在指定的位置添加新增的元素。
remove(index)-->根据下标删除元素
get(index)-->获取元素
set(index,E)--->根据下标,替换元素
indexOf()-->搜索指定的元素,返回下标,如果元素没有,返回-1。
subList(fromIndex,toIndex)-->截取子容器
iterator()
listIterator()
泛型:
概念:广泛的类型。指定一个类型。
作用:存入到集合中的元素,Object类类型,自动向上转型。当获取的时候,需要手动的向下转型,降低效率,容易出错。使用泛型,指定集合中存储的元素的数据类型,保护容器中数据类型的安全。
String-->Object,Person-->Object ...
String-->String,Person-->Person
使用:创建集合的时候,使用泛型来指明该容器能够存储的数据类型。
语法格式:
容器<数据类型> 容器对象 = new 容器<>();
注意点:
集合中的泛型:限于引用类型,基本类型需要写成对应的包装类类型。
迭代器:
用途:专门用于遍历集合中每一个元素的。
工作原理:
step1:先获取Collection上获取迭代器对象:iterator()--->Iterator对象:it
step2:调用迭代器hasNext(),用于判断迭代器是否有下一个元素可以迭代获取。
boolean:true,false
step3:调用next(),获取下一个元素。迭代器对象会向后移动一个位置。
Iterator接口中:
hasNext()-->是否有下一个元素。
next()-->获取下一个元素对象,同时迭代器对象向后移动一个位置
remove()-->移除,已经迭代出的最后一个元素。也就是移出了迭代器左侧的元素。
注意点:
1、当迭代器进行迭代工作的时候,不能操作集合本身进行添加或删除工作;如果想删除元素,使用迭代器子代的remove()进行删除。
2、迭代器工作的时候:先调用hasNext(),判断是否有可以迭代的元素,调用next()。否则异常:NoSuchElementException。
集合的遍历迭代:
1、Collection集合:没有下标
A:Iterator迭代器来遍历
B:for-each,增强for循环
2、List集合:有下标
A:Iterator迭代器来遍历
B:for-each,增强for循环
C:普通for循环,结合get(index)-->E
D:ListIterator迭代器也能遍历。
2.1、ArrayList集合
ArrayList集合,底层实现:采用数组的结构实现的。(最大的特点:内存连续)。
也会叫做变长数组。
优点:遍历集合中的元素,效率很高
缺点:更改集合中的元素,效率相对低。

2.2、LinkedList集合
LinkedList集合:底层实现:采用双向链表的结构实现。
优点:更改集合中的元素,效率很高。
缺点:遍历集合中的元素,效率相对低。
queue:队伍,队列,行列
生活中买电影票,排队
生活中买火车票,排队
deque:double -ended queue,双端队列
LinkedList实现类,区别于ArrayList,除了实现List接口,还实现了Deque接口。

LinkedList实现类:
实现的接口:
List接口----------------------------------->Collection
Deque(双端队列)接口----->Queue(队列)接口------>Collection
模拟栈的结构:后进先出(LIFO),栈顶元素,
push(),压栈,入栈,pop(),弹栈,出栈
模拟队列的结构:先进先出(FIFO),队头元素
offer(),poll()
栈的结构特点:

队列的结构特点:

对比ArrayList,LinkedList,Vector实现类
A:ArrayList,底层采用数组结构的实现的。(内存中连续空间)。jdk1.2
只实现了List接口,功能都是List接口中规定的。
优缺点:
优点:遍历访问元素,效率很高
缺点:插入或删除元素,效率相对低。
B:LinkedList,底层采用双向链表结构实现的。(元素在内存中不挨着,元素之间的指向)。jdk1.2
实现了List接口的同时,还实现了Deque接口,所以有这两个接口中的功能。
优缺点:
优点:插入或删除元素,效率很高。
缺点:遍历访问元素,效率相对低。
注意点:
如果一个集合,频繁的添加或删除元素,建议选择LinkedList。
如果一个集合,绝大多数的操作就是遍历查询,建议选择ArrayList。
如果要模拟栈,队列等结构,建议选择LinkedList。
C:Vector,是ArrayList的前身。也是数组的结构。古老的类。从jdk1.0的版本就有了。
线程安全,效率低,后来被ArrayList替代了。
ArrayList和LinkedList都是线程不安全的,效率高。Collections工具类,可以获取线程安全的集合。
网友评论