java容器总结

容器大体分为两类: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时,客户端代码不用改变。这就是针对抽象编程。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值