Java集合框架
话不多说直接上图,以下小结一下一些集合类的特性,具体方法先行略过。
Collection接口
-
Collection接口是最最基础的接口,所有实现Collection接口的类都必须提供两个构造函数:1.默认的无参构造方法,2.以Collection接口为参数的,能够方便使用者复制Collection的构造方法。
-
遍历Collection中的每一个元素时,要用到iterator()方法,这个方法返回一个迭代器,特别注意通过Iterator遍历本身是无序的,要看它的实现类是否能够保证遍历的有序与否。
//常用的用法
Iterator it = Collection.iterator(); //得到迭代器
while(it.hasNext()){ //如果集合中有下一个元素的话
Object obj = it.next(); //得到下一个元素
}
Set接口
-
Set是一种不包含重复元素的Collection,元素是否重复通过equals方法来判断。利用这种特性,我们想要去重时可以把元素都塞进一个Set接口的实现类,出来就是没有重复的了。
-
所以用这个set的实现类时,特别要小心存入元素的equals()方法,equals()方法使用不当可能会导致Set()吞掉一些元素。
Map接口
- Map提供key到value的映射,一个Map中不能包含相同的key,每个key只能映射一个value。
- Map接口提供三种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组Key-Value映射。通常返回为Set。务必务必特别小心使用由图返回的Set集合,通常对图的修改或者对Set的修改会互相影响!!
HashTable接口
- Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。
- 添加数据使用put(key, value),取出数据使用get(key),这两个基本操作的时间开销为常数。
- Hashtable通过initial capacity和load factor两个参数调整性能。通常缺省的load factor 0.75较好地实现了时间和空间的均衡。增大load factor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。
- 由于作为key的对象将通过计算其散列函数来确定与之对应的value的位置,因此任何作为key的对象都必须实现hashCode和equals方法。hashCode和equals方法继承自根类Object。
- Hashtable是线程安全的,同一时间只允许一个对象来访问。
HashMap类
- HashMap和Hashtable类似,不同之处在于HashMap是允许多线程的,但是线程不安全,一般不在多线程中使用,并且允许null,即null value和null key。
TreeMap类
- TreeMap最大的特点就是会对Map里的内容进行排序
- 在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。使用HashMap要求添加的键类明确定义了hashCode()和 equals()的实现。
LinkedHashMap
- 可以脑部是用ArrayList做的Map,其中顺序是严格按照插入顺序排列的。
List接口
List接口的常用实现由LinkedList和ArrayList。
LinkedList类(链表)
- LinkedList实现了List接口,允许null元素。此外相比于List接口LinkedList提供额外的get,remove,insert方法。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
ArrayList类(可变数组)
- ArrayList实现了大小可变的数组。它允许所有元素,包括null。ArrayList没有同步性。
- 内部实际上是容量大到一定程度时就会自动扩大的形式来实现的大小可变。
总结

-
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是面向对象的特性。
-
如果涉及到堆栈,队列等操作,应该考虑用List;对于需要快速插入,删除元素,应该使用LinkedList;如果需要快速随机访问元素,应该使用ArrayList。
-
使用Map时,查找、更新、删除、新增最好使用HashMap或HashTable;对Map进行自然顺序或自定义键顺序遍历时,最好使用TreeMap;
来源:oschina
链接:https://my.oschina.net/u/4186622/blog/3193373