java中hashset和hashmap 有什么特点。

Python08

java中hashset和hashmap 有什么特点。,第1张

什么是HashSet

HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。

public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。

什么是HashMap

HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。Map接口有两个基本的实现,HashMap和TreeMap。TreeMap保存了对象的排列次序,而HashMap则不能。HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。

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

你可以阅读这篇文章看看HashMap的工作原理,以及这篇文章看看HashMap和HashTable的区别。

HashSet和HashMap的区别

*HashMap* *HashSet*

HashMap实现了Map接口HashSet实现了Set接口

HashMap储存键值对HashSet仅仅存储对象

使用put()方法将元素放入map中使用add()方法将元素放入set中

HashMap中使用键对象来计算hashcode值HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false

HashMap比较快,因为是使用唯一的键来获取对象HashSet较HashMap来说比较慢

hashset是set的子集,Set的底层是Map实现的,Map的实现是散列码,就是根据key的hashcode计算出来的,通过这个hashcode计算出一个元素放在数组中的index,这样是为了快速查找元素,减少相等的判断。Set set = new LinkedHashSet()这样的话,就是按照元素的加入顺序保存元素的顺序。

set 是会自动去重复的, 这个重复的意思是指 set 中的element 有相同的内存地址。

例如

User user1 = new User()

user.setName("abc")

User user2 = new User()

user.setName("abc")

这里的user1 与 user2 的内存地址是不同的(在堆各个有一块自己的地址),虽然二者都可以getName 拿到abc 但是并不 “==”

如果 User user3 = user1

这个时候 user3 == user1 只是栈内的引用名称不相同 但都指向的是同一个内存地址。

所以 将 user1 与 user2 add到hashSet中后 set的size 会是2 如果是 user1 跟 user3 放进去 set会去重复 size 会是1