- 各接口及类关系图
- Iterable
- 所有集合的初始接口,实现该接口可进行foreach操作,只有一个iterator()方法,并返回iterator类型;
- Iterable在java.lang下,Iterator在java.util下,Iterator主要包括hasNext(), next(), remove();
- 所有实现了Iterable就可以操作迭代器iterator, 但能使用迭代器iterator就未必实现了Iterable接口,如数组?
- 为什么需要Iterable? 因为Iterator中的next(), hasNext()依赖于当前迭代器中迭代的位置(指针),如果Collection直接实现Iterator会使迭代位置不可知,需要增加reset重置当前迭代,但也只能存在一个当前迭代;而Iterable每次可从头开始计数,而且多个迭代互不影响。
- Collection
- 一个基本集合接口,包含一组Object元素;
- 在java.util下,同时Collections是一个工具类,包含对集合各类操作的静态方法,比如sort;
- Collection下有三个子接口:List, Set, Queue
- List
- 有序(保持插入数据时的顺序)、可重复的集合;
- 子类ArrayList是基于数组实现的,但size动态可变化的;
- 子类LinkedList实现 List<E>, Deque<E>, Cloneable, Serializable,双向链表接口;可作为双向Queue使用,也可以当做Stack使用;
- ArrayList查询效率高于LinkedList, 因为访问LinkedList中的元素,需要每次从头指针开始移动,而ArrayList可直接通过数组下标的方式获取;但如果LinkedList通过Iterator, 则效率与ArrayList不会相差多少,因为Iterator方式遍历会缓存前后节点;
- ArrayList插入和删除的效率会比LinkedList低,因为ArrayList每次插入或删除元素时,该元素的后续下标位置也要做相应的调整。
- JDK1.2以后,Vector也是通过List接口实现的,Vector是线程安全的,ArrayList是非线程安全;
- Stack是Vector子类,其主要特征是先进后出(FILO, First In Last Out)。
- Set
- Set集合里的元素没有顺序,但不能包含重复元素;
- Map
- 当把HashMap中的value都看成null时,可视为Set,其key的存储形式与Set一致;
- TreeMap维护key以某种排序方式;
原文地址:https://www.cnblogs.com/stpan/p/9485039.html
时间: 2024-09-28 22:39:20