HashMap和HashSet的区别

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来说比较慢
如果你还知道其它的什么不同点,请留言。

时间: 2024-10-27 07:45:15

HashMap和HashSet的区别的相关文章

HashMap 和 HashSet的区别_java

HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整.HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合.collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口.它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它

浅析Java中Map与HashMap,Hashtable,HashSet的区别_java

HashTable和HashMap区别 第一,继承的父类不同.Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类.但二者都实现了Map接口. 复制代码 代码如下: public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable public class HashMap<K,V>extends

HashMap和Hashtable的区别

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题.Hashtable是个过时的集合类,存在于Java API中很久了.在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java集合框架中的一部分.Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合

hashmap hashtable-哪位能详细告知HashMap和HashTable的区别?

问题描述 哪位能详细告知HashMap和HashTable的区别? 在面试的时候HashMap和HashTable的区别?在面试的时候HashMap和HashTable的区别? 解决方案 Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的,只有HashMap可以让你将空值作为一个表的条目的key或value 解决方案二: HashMap和Hashtable的详细区别 解决方案三: haspTable现在不用了 解决方案四: 这是java的基础类库,提供

java面试题——详解HashMap和Hashtable 的区别_java

一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 可见Hashtable 继承自 Dictiionary 而 HashMap继承自Abs

HashMap 和 Hashtable的区别_java

HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.HashMap的工作原理.ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题.Hashtable是个过时的集合类,存在于Java API中很久了.在Java 4中被重写了,实现了Map接口,所以自此以后也成了Java集合框架中的一部分.Hashtable和HashMap在Java面试中相当容易被问到,甚至成为了集合

Java中HashMap和Hashtable及HashSet的区别_java

Hashtable类   Hashtable继承Map接口,实现一个key-value映射的哈希表.任何非空(non-null)的对象都可作为key或者value.   添加数据使用put(key,value),取出数据使用get(key),这两个基本操作的时间开销为常数.   Hashtable通过initial   capacity和load   factor两个参数调整性能.通常缺省的load   factor   0.75较好地实现了时间和空间的均衡.增大load   factor可以节

[Java] TreeMap、HashMap、LindedHashMap的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! Map家族的继承关系 1 . TreeMap TreeMap实现SortMap接口,能够把它保存的记录根据键排序, 默认是按键值的升序排序(自然顺序),也可以指定排序的比较器( Comparator ),当用Iterator 遍历TreeMap时,得到的记录是排过序的. 注意,此实现不是同步的.如果多个线程同时访问一个映射,则其必须 外部同步.这一般是通过对自然封装该映射的对象执行同步操作来完成的.如果不存在这样的对象,则应该使用 Collec

[Java] HashMap和HashTable的区别

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! HashTable Hashtable继承于Dictionary字典,实现Map接口 键.值都不能是空对象 多次访问,映射元素的顺序相同 线程安全 hash算法 ,Hashtable则直接利用key本身的hash码来做验证 数据遍历的方式 Iterator (支持fast-fail)和 Enumeration (不支持fast-fail) 缺省初始长度为11,内部都为抽象方法,需要 它的实现类一一作自己的实现 备注:程序在对 collectio