浅谈List、Set、Map的区别

java集合的主要分为三种类型:List、Set、Map

(1)List 主要有ArrayList、LinkedLis(List的特征是其元素以线性方式存储,可以存放重复对象)

ArrayList的 优点:查询效率高

                  缺点:向List中间插入与移除元素的速度很慢

LinkedLis 优点:LinkedList 适用于要头尾操作或插入指定位置的场景

                   缺点:查询效率低

总结:当需要对数据进行多次访问的情况下选用ArrayList

          当需要对数据进行多次增加删除修改时用LinkedList


(2)Set的实现类主要有HashSet、TreeSet和LinkedHashSet(Set的特征是对象不按特定的方式排序,不能放重复对象)

HashSet为快速查找而设计。存入HashSet的对象必须定义hashCode()。

TreeSet:  保存次序的Set, 底层为树结构。使用它可以从Set中提取有序的序列。

LinkedHashSet具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。

                            于是在使用迭代器遍历Set时,结果会按元素插入的次序显示

总结:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet

          通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet


(3)Map的实现类主要有HashMap和TreeMap还有LinkedHashMap、WeakHashMap、IdentifyHashMap
       (Map的特征是存放键值对)

HashMap:使用对象的hashCode()进行快速查询,此方法能够提高性能

TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在 于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。

LinkedHashMap类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序

WeakHashMap弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收

IdentifyHashMap 使用==代替equals()对“键”作比较的hash map。为解决特殊问题而设计

List、Set都是继承自Collection接口,而Map不是

List:元素放入有顺序,元素可以重复,List可以动态增长,查找元素效率高,插入删除元素效率低

    Set:元素放入无顺序,元素不可重复,检索元素效率低下,删除和插入效率高

    Map:用来存储键值对






猜你喜欢

转载自blog.csdn.net/weixin_41069280/article/details/80374515
今日推荐