Java集合

集合的继承关系:

collection-------Set-------------EnumSet

                                            HashSet--------------LinkedHashSet

                                            SortedSet (I)------------TreeSet

-------------Queue(队列)-------Dqeue (I)-----------------ArrayDqeue

-----------------List---------------LinkedList

                                            ArrayList

                                            Vector------------------Stack

Collection中的集合说明:

1. Set 集合

Set集合不允许有重复元素,add( ) 方法返回 Boolean 值,表示是否添加成功

①HashSet:按 hash 算法来存储集合中的元素,有很好的存取和查找功能,其值可以为 null。

②LinkedHashSet:是HashSet 的子类,也是根据 元素的 hashCode 值决定元素的存储位置,同时使用链表维护元素的次序,使得看起来是以插入的顺序保存的。遍历时按照元素的添加顺序访问。它内部是HashSet存储,依然不允许集合元素重复。

③TreeSet:实现了SortedSet接口,所以有排序的状态。默认采用自然排序(不是插入顺序),可以定制排序。内部采用的是红黑树的数据结构来存储集合元素。

2. List 集合

List 集合代表一个有序、可重复的集合,默认按照添加顺序设置元素的索引。

①Vector:内部以数组实现,可变长度,用法上跟ArrayList几乎一样,虽然线程安全,但很古老,有很多缺点,尽量少用Vector。

②Stack:Stack是Vector的子类,模拟“栈”数据结构,“后进先出”的容器。进栈出栈都是Object对象,因此从栈中取出元素后要进行类型转换。提供了  i. Object peek( );返回栈的第一个元素,不出栈。ii. Object pop( );返回栈顶元素,出栈;iii. void push( Object o);压入栈顶。注意:Stack继承的是Vector,也是一个古老的类,线程安全,但性能较差,应尽量少用Stack类。如果真正需要“栈”这种数据结构,可以考虑使用 ArrayDeque。

③ArrayList:内部数组实现,默认长度10,可以在创建时指定长度,也可以指定自动增加的量。ArrayList是List集合的主要实现类,ArrayList是线程不安全的,若有多个线程同时访问一个ArrayList,必须手动保证该集合的同步性(使用Collections工具类)。

④LinkedList:(同时实现了Deque接口)采用双向列表实现,对数据的索引要从头开始遍历,因此随机访问的效果差,但是插入、删除元素时不用移动数据,因此插入效率较高,是非线程安全的容器。

⑤固定长度的List:使用Arrays工具类,提供了asList( Object ... o )方法,可以把一个数组或是指定个数的对象转换成一个List集合,这个List集合不是ArrayList、Vector的实现类,而是 Arrays类的内部类 ArrayList 的实例。长度固定,不可以添加或删除元素。

综合对比List集合:

  1. 如果需要遍历List元素,对于ArrayList、Vector集合,应该使用随机访问方法(get)来遍历集合元素,这样性能好;对于LinkedList集合,则应该采用迭代器(Iterator)来遍历元素。
  2. 如果需要经常执行插入、删除操作来改变包含大量数据的List集合的大小,可以考虑使用 LinkedList 集合。使用ArrayList、Vector集合可能需要经常重新分配内部数组的大小,效果可能较差。
  3. 如果有多个线程需要访问List集合中的元素,可以考虑使用 Collections 将集合包装成线程安全的集合。

Map集合的关系:

Map-----------------EnumMap

                            HashMap----------------LinkedHashMap

                            SortedMap--------------TreeMap

                            WeakHashMap

                             Hashtable---------------Properties

Map集合的说明:

①HashMap:

②LinkedHashMap:

③TreeMap:

④WeakHashMap:

⑤Hashtable:

⑥IdentityHashMap:

Map实现类的性能对比分析:

  1. 对于HashMap和Hashtable,二者的实现机制几乎一样,但由于Hashtable是一个古老的线程安全的集合,因此HashMap通常速度更快。
  2. TreeMap通常比HashMap、Hashtable要慢(尤其是在插入、删除K-V对时更慢),因为TreeMap底层采用红黑树来管理K-V对(红黑树的每个节点就是一个K-V对)。
  3. 使用Tree Map有个好处:TreeMap中的K-V对总是处于有序状态,无须专门排序。当TreeMap被填充以后,就可以调用keySet()方法,获取由Key组成的Set,然后调用toArray() 方法生成Key的数组,接下来使用Arrays的binarySearch()方法在已排序的数组中快速地查询对象。
  4. LinkedHashMap 比 HashMap 慢一点,因为要维护链表来保持Map中的key-value为添加顺序。IdentityHashMap性能没有特别出色,因为它采用HashMap基本相似的实现,只是内部使用 == 而不是 equals 方法判断元素相等。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AndyAtcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值