Collection接口下的一些其他子类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40178464/article/details/81121915

1.LinkedHashMap

LinkedHashMap继承于HashMap,很多方法都是HashMap的方法,但是它的数据取得是有序的,即怎样的顺序插入就按怎样的顺序取出,底层用一个双向链表保证有序性。
这里写图片描述
ture表示按访问顺序排序(即插入152,取得152),false表示按插入顺序排序(即插入152,取得125)
默认构造函数中默认使用accessOrder=false,故默认采用插入顺序排序:
这里写图片描述



2.TreeMap

TreeMap是基于红黑树实现的一种Map实现类,底层属性除了key和value之外,还有Entry型的root,在Entry中还有其特有的属性 :
这里写图片描述

特点及使用场景:

1.TreeMap的查询、插入、删除效率均没有HashMap高,一般只有要对key排序时才使用TreeMap。
2.TreeMap的key不能为null。
3.TreeMap不是同步的。


3.WeakHashMap

基本属性与HashMap相同,就是多出了一个ReferenceQueue型的属性queue。
这里写图片描述
WeakHashMap的特殊之处在于entry可能会被GC自动删除,即使我们没有调用remove()或者clear()方法,因为WeakHashMap 内部是通过弱引用来管理entry的。



4.HashSet

HashSet是一个基于HashMap实现Set接口的特殊集合,它拥有HashMap的所有基础属性,区别在于Set集合只能存储对象,所以HashSet中数据不是以键值对的形式存在的,它的数据是无序且不能重复的,可以为null,线程不安全。
这里写图片描述
这里写图片描述

add()方法:当数据不存在或key为null时进行插入返回true,当数据已经存在时返回false。



5.LinkedHashSet

LinkedHashSet继承于HashSet,所以它也是基于HashMap实现的一种Set集合的实现子类,看一看它的构造函数:
这里写图片描述
这里写图片描述
这里写图片描述
可以看到其构造函数都是调用了父类的带有三个参数的构造函数,即:
这里写图片描述
再向上查看LinkedHashMap带有两个参数的构造函数,即:
这里写图片描述
可以看到AccessOrder=false,由前面介绍到的LinkedHashMap的知识可知LinkedHashSet实现的是插入有序。



6.集合的一些使用技巧

1.需要唯一:

·需要:Set
·不需要:Map

2.需要制定顺序:

   ·需要: TreeSet
   ·不需要:HashSet

3.是否想要一个和存储一致的顺序(有序):

   ·需要:LinkedHashSet
   ·不需要:List

4.需要频繁增删:

    ·需要:LinkedList
    ·不需要:ArrayList

5.记录每一个容器的结构和所属体系

 看名字,比如:
    ·List:ArrayList,LinkedList
    ·Set:HashSet,TreeSet
    后缀名就是该集合所属的体系,前缀名就是该集合的数据结构。

6.看到array:就要想到数组,就要想到查询快,有索引
7.看到link:就要想到链表,就要想到增删快
8.看到hash:就要想到哈希表,就要想到唯一性
9.看到tree:就要想到二叉树,就要想要排序,就要想到两个接口Comparable,Comparator 。


注:以上使用的API版本为JDk1.7.0_81

猜你喜欢

转载自blog.csdn.net/qq_40178464/article/details/81121915