HashSet、TreeSet与HashMap

HashSet:

  HashSet实现了Set接口,它不允许集合中出现重复元素。当我们提到HashSet时,第一件事就是在将对象存储在

HashSet之前,要确保重写hashCode()方法和equals()方法,这样才能比较对象的值是否相等,确保集合中没有

储存相同的对象。如果不重写上述两个方法,那么将使用下面方法默认实现:

 public boolean add(Object obj)方法用在Set添加元素时,如果元素值重复时返回 "false",如果添加成功则返回"true"

  1. 没有重复元素
  2. 可以高效的添加、删除元素、判断元素是否存在,效率都为O(1)
  3. 没有顺序
  4.   HashSet 是哈希表实现的,可以放入null,但只能放入一个null

TreeSet:

        TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值 

      适用场景分析:HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。我们通常都应该使用HashSet,在我们需要排序的功能时,我们才使用TreeSet。

HashMap:

  HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许出现重复的键(Key)。Map接口有两个基本的实现

TreeMap和HashMap。TreeMap保存了对象的排列次序,而HashMap不能。HashMap可以有空的键值对(Key(null)-Value(null))

HashMap是非线程安全的(非Synchronize),要想实现线程安全,那么需要调用collections类的静态方法synchronizeMap()实现。

public Object put(Object Key,Object value)方法用来将元素添加到map中。

拥有特定容量和加载因子,可以在新建变量时定义,比如:

HashSet<Integer> subScrips = new HashSet<>(50,1.0f)  第一个为加载容量,第二个为加载因子

名词解释:

初始容量 :是哈希表在创建时的容量。

加载因子 :是哈希表在其容量自动增加之前可以达到多满的一种尺度。

当哈希表中的条目数超出了加载因子与当前容量的乘积时,通过调用 rehash 方法将容量翻倍。

比如说向水桶中装水,此时HashMap就是一个桶, 这个桶的容量就是加载容量,而加载因子就是你要控制向这个桶中倒的水不超过水桶容量的比例,比如加载因子是0.75 ,那么在装水的时候这个桶最多能装到3/4 处(0.75即为3/4),超过这个比例时,桶会自动扩容。因此,这个桶最多能装水 = 桶的容量 * 加载因子。

如果桶的容量是40,加载因子是0.75 那么你的桶最多能装40*0.75 = 30的水,如果你装了30的水还想继续装水,那么就该用大一点的桶,调用rehash就是负责增加桶的容量的方法。

摘抄原文地址:
原文:https://blog.csdn.net/injurooioo/article/details/49492443 
 

这里有一个比较有趣的地方:

首先要知道hashset的初始容量为16,初始因子为0.75,当hashset的容量达到能够装的最大容量时就会进行再哈希(rehash)操作,即调用rehash()方法,也就是扩容,会将容量进行翻倍,也就是16 32 64那么分别用这几个数来乘以初始因子即0.75得到 12 24 48也就是说在12 24 48这几个容量的位置都会调用rehash方法,有趣的地方来了,本来hashset是无序的,但是当容量超过48的时候就全部变成了有序,测试结果如图:

 各位可以自行测试。

 

使用场景:

hashmap:适用于在Map中插入、删除和定位元素。 
treemap:适用于按自然顺序或自定义顺序遍历键(key)。

 

HashSet和HashMap的区别:

HashSet                                                                     HashMap

实现Set接口                                                               实现Map接口

存储对象                                                                    存储键值对

调用add向set中添加方法                                           调用put向map中添加方法

猜你喜欢

转载自blog.csdn.net/weixin_38972910/article/details/85247655