欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HashMap 和 HashSet的区别

程序员文章站 2024-03-31 21:31:34
hashmap和hashset的区别是java面试中最常被问到的问题。如果没有涉及到collection框架以及多线程的面试,可以说是不完整。而collection框架的问...

hashmap和hashset的区别是java面试中最常被问到的问题。如果没有涉及到collection框架以及多线程的面试,可以说是不完整。而collection框架的问题不涉及到hashset和hashmap,也可以说是不完整。hashmap和hashset都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为set接口,list接口和queue接口。它们有各自的特点,set的集合里不允许对象有重复的值,list允许有重复,它对集合中的对象进行索引,queue的工作原理是fcfs算法(first come, first serve)。

首先让我们来看看什么是hashmap和hashset,然后再来比较它们之间的分别。

什么是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来说比较慢

如果你还知道其它的什么不同点,请留言。

原文链接: javarevisited 翻译: importnew.com - 唐小娟
译文链接: http://www.importnew.com/6931.html