1 集合和数组之间的主要区别
- 数组是定长的,集合是不定长的;
- 数组的类型是确定的,集合类的类型可以是不确定的,可以存储不同类型的对象;
2 集合框架Collection(从底层不断向上抽取而成的)
这些容器的主要区别是:每一个容器对数据的存储方式不同,即数据结构不同。相同之处是:都是容器。
2.1 Collection中常用的共性方法(下面标出不熟悉的)
- containsAll(Collection<?> c):两个集合之间的交集。
- removeAll:移除两个集合之间的交集。
- retainAll(Collection<?> c):两个集合之间的交集。
2.2 Iterator迭代器
因为每个集合的数据结构不同,所以每个取出的方式与不同,但是都有共性的内容:判断和取出。
那么就可以将共性抽取,形成一个内部类。这些内部类都符合一个规则,该规则就是Iterator,通过对外提供一个方法iterator()来获取元素。
2.3 List
2.31 List共性方法(不熟悉)
- indexOf:返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。更确切地讲,返回满足 (o==null ? get(i)==null : o.equals(get(i)))的最低索引i ,如果不存在此类索引,则返回 -1。
- lastIndexOf:返回此列表中最后一次出现的指定元素的索引,或如果此列表不包含索引,则返回 -1。更确切地讲,返回满足(o==null ? get(i)==null : o.equals(get(i)))的最高索引 i,如果不存在此类索引,则返回 -1。
2.32 Arraylist(元素可重复,有序)
Arraylist特点:查询速度很快,但是增删稍慢。底层的数据结构是数组。线程不同步。默认长度为10,超出10时,50%延长。
元素有序和可以重复的原因:
该集合中存在索引,可以通过索引顺序取得元素,同样相同的元素也可以通过不同的索引来区分。Arraylist中的Contians()和remove()方法底层依赖的是equals方法。
ListIterator方法
注意点:不能既用ArrayList的add方法去添加元素,同时又用ArrayList中的Iterator方法去取出元素。这样会导致并发修改异常。而且Iterator只能对元素进行判断、取出、删除的操作。
如果希望对元素进行如添加、修改等,就需要使用其子接口,ListIterator方法。
该接口只能通过List集合的ListIterator方法获取。
2.33 LinkedList
LinkedList底层使用的链表数据结构。
特点:增删速度很快,查询稍慢。
LinkedList中的特有方法:
- 增加元素:addFirst(),addLast()和取出元素:getFirst(),getLast()和根据索引取出元素方法get();
- 添加元素:offer(末尾添加元素)、offerFirst(头部添加)、offerLast(尾部添加);
- 获取不移除:peek、peekFirst、peekLast;
- 获取并移除:poll、pollFirst、pollLast;
- 取出和插入:pop、push
2.34 Vector
Vector底层是数组数据结构,Vector线程同步的。默认长度为10,超出10时,100%延长。
元老级干部,几乎被ArrayList替代。