您的位置:首页 > 编程语言 > Java开发

java容器总结

2016-05-08 20:18 267 查看
容器大体分为两类:Collection和Map。

区别:

1 Collection中存储了一组对象,而Map存储键值对。

2 Collection的子类都实现了iterator这个方法,该方法能返回一个Iterator对象。

Collection的具体实现包括List和Set。

区别:

1 List是有序的,元素可以重复的,Set是无序的,元素不可以重复。

2 Set的value最多只能存一个null。

List的具体实现包括LinkedList,ArrayList,Vector和Stack。

区别:

1 LinkedList底层是通过链表实现的,所以在中间插入快,但是定位查找慢,是非线程安全的。

2 ArrayList底层是通过数组实现的,所以在中间插入慢,但是定位查找快。

3 Vector底层也是数组,可以理解为线程安全的ArrayList。

4 Stack是后进先出(LIFO)的数据结构,是栈。

Set的具体实现包括HashSet,LinkedHashSet,TreeSet,EnumSet。

区别:

1 HashSet 集合存入元素时,会调用该对象的hashCode()方法得到hashCode值,根据hashCode值决定对象在HashSet中存储的位置,如有两个元素通过equals方法比较返回true,但它们的hashCode不同,HashSet会把它们存储在不同位置,也就可以添加成功。

2 LinkHashSet 比HashSet 多了一个插入元素时维护元素次序的链表,这样使得元素看起来是以插入的顺序保存,也就是说在遍历LinkHashSet时,将会按元素添加的顺序访问集合里的元素,因此它在插入元素时性能比HashSet略低,但在遍历时性能比HashSet高,因为它以链表来维护内部顺序。

3 TreeSet是SortedSet接口的唯一实现,可以确保元素处于排序状态。

4 EnumSet是一个专门为枚举类设计的集合类,其中所有元素都必须是指定枚举类型的枚举值,该枚举值类型在创建EnumSet时显式或隐式地指定。其集合元素也是有序的,其以枚举值在Enum类内定义的顺序来决定集合元素的顺序。

Map的实现类包括Hashtable,HashMap,WeakHashMap。

区别:

1 HashMap底层是数组加链表,是非线程安全的。

2 Hashtable底层是数组加链表,是线程安全的。

3 WeakHashMap是一种改进的HashMap,它对key实行弱引用,如果一个key不再被外部引用,那么该key可以被回收。

总结:

1 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。

2 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同事操作一个类,应该使用同步的类。

3 要特别注意哈希表的操作,作为key的对象要正确复写equals和hashCode方法。

4 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: