HashMap、HashTable、HashSet区别
程序员文章站
2022-07-10 17:42:13
1、HashMap和HashTable1.1 hashmap是线程不安全的,hashtable线程安全(这个区别就像Vector和ArrayList一样)1.2 hashmap的key值可以为null,hashtable不行(虽然不建议这样设置)1.3 hashmap继承自AbstractMap类,而hashtable继承自Dictionary类。但二者都实现了Map接口。1.4 hashmap对key的hashcode进行了二次哈希,然后取模获得插入位置,hashtable直接使用key的hash...
1、HashMap和HashTable
1.1 hashmap是线程不安全的,hashtable线程安全(这个区别就像Vector和ArrayList一样)
1.2 hashmap的key值可以为null,hashtable不行(虽然不建议这样设置)
1.3 hashmap继承自AbstractMap类,而hashtable继承自Dictionary类。但二者都实现了Map接口。
1.4 hashmap对key的hashcode进行了二次哈希,然后取模获得插入位置,hashtable直接使用key的hashcode,位置 index = hashcode % 数组长度。
2、HashSet
首先来说说set集合:
Set集合,基础自Collection。特征是插入无序,不可指定位置访问。
Set集合的实现类可说是基于Map集合去写的。通过内部封装Map集合来实现的比如HashSet内部封装了HashMap。
Set集合中不能重复(== 或 eqauls)的元素
Set集合的常用实现类有 HashSet TreeSet
hashset底层为hashmap,是线程不安全的,于此同时具有set集合的特点。
那么,hashset存放的是对象引用还是对象呢?
HashSet<MyBean> setBean = new HashSet<> ();
MyBean b1 = new MyBean(1,"B1");
MyBean b2 = new MyBean(2,"B2");
setBean.add(b1);
setBean.add(b2);
MyBean b3;
//复制引用
b3=b1;
setBean.add(b3);
System.out.println(setBean.size());
以上代码没有重写MyBean的equals()和hashcode(),输出的size为2,是否说明Set里存放的是引用而不是对象?(我自己理解的是存放的是引用,希望各位大佬能在评论区解答)
本文地址:https://blog.csdn.net/qq_26030275/article/details/109614530
推荐阅读
-
HashTable、Dictionary、ConcurrentDictionary三者区别
-
Java自学-集合框架 HashMap和Hashtable的区别
-
对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解
-
HashTable与ConcurrentHashMap的区别
-
Java自学-集合框架 ArrayList和HashSet的区别
-
HashMap在jdk1.7和1.8中的区别
-
HashMap在jdk1.7和1.8中的区别
-
Hashtable和HashMap源码分析
-
HashMap、HashSet、TreeMap、TreeSet判断元素相同
-
HashMap与Hashtable的区别 面试多线程框架