HashSet的底层】的更多相关文章

今天看博客,发现有个哥哥写到 HashSet的底层是数组结构,有点懵逼,不是HashMap吗怎么成数组了? 遂去查了下源码: 得以下结论: HashSet底层是 HashMap,其元素是内部map的key: 所有key所对应的值都是一个静态的Object: 至于HashMap的结构:这是另外一个哥哥写的 数组+链表的结构 HashMap的存取值: // 存储时:int hash = key.hashCode();int index = hash % Entry[].length;Entry[in…
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率. 我们要保证相同对象的返回的hashCode一定相同,也要保证不相同的对象的hashCode尽可能不同(因为数组的边界性,hashCode还是可能相同的).例子: public int hashCode(){ return name.hashcode()+age; } 这个例子保证了相同姓名和年龄的记录返回的hashCode是相同的. 使用has…
HashSet的底层其实就是HashMap,换句话说HashSet就是简化版的HashMap. 直接上代码: package com.xzlf.collection2; import java.util.HashMap; public class MyHashSet<E> { HashMap<E, Object> map; private static final Object PRESENT = new Object(); public MyHashSet() { map = n…
总结HashSet以及分析部分底层源码 1. HashSet继承的抽象类和实现的接口 继承的抽象类:AbstractSet 实现了Set接口 实现了Cloneable接口 实现了Serializable序列化接口:该接口标记此类支持序列化操作 2. HashSet底层数据结构 HashSet底层是基于HashMap实现的,HashMap底层数据结构是基于数组+链表实现的. 1. 特点 既保存了数组查询和修改元素效率快的优点,也保存了链表在添加和删除元素时效率快的特点. 存储的元素是无序的,不允许…
1:集合 2 Collection(单列集合) 3 List(有序,可重复) 4 ArrayList 5 底层数据结构是数组,查询快,增删慢 6 线程不安全,效率高 7 Vector 8 底层数据结构是数组,查询快,增删慢 9 线程安全,效率低 10 LinkedList 11 底层数据结构是链表,查询慢,增删快 12 线程不安全,效率高 13 Set(无序,唯一) 14 HashSet 15 底层数据结构是哈希表. 16 哈希表依赖两个方法:hashCode()和equals() 17 执行顺…
HashSet 的实现 对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码: public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { // 使用 HashMap 的 key…
(最近在老师叫我们用java去实现LRU算法,了解到要用双链表去做,要用到LinkHashMap去做,但自己对java的几大集合框架并不熟悉,在学习过程了解到了HashMap和HashSet,做个简单笔记吧) HashMap HashMap是一个有序的集合,是有一对属性值的集合,属性包含key,和value.关键字key是唯一不重复的,查询起来速度很快.   HashMap 的实例有两个参数影响其性能:初始容量 和 加载因子.容量是 哈希表中桶的数量,初始容量只是哈希表在创建时的容量.加载因子…
今天的主角是HashSet,Set是什么东东,当然也是一种java容器了.      现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下HashMap了),需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法(这个在分析HashMap中都有讲过).那么今天的HashSet它又是怎么一回事的,他的存在又是为了解决什么问题呢?      先来看下Set的特点:Set元素无顺序,且元素不可以重复. .想到了什么…
集合和引用 就像引用类型的数组一样,当我们把 Java 对象放入数组之时,并不是真正的把 Java 对象放入数组中,只是把对象的引用放入数组中,每个数组元素都是一个引用变量. 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元素的存储位置,这样可以保证能快速存.取集合元素:对于 HashMap 而言,系统 key-value 当成一个整体进行处理,系统总是根据 Hash 算法来计算 key-value 的存储位置,这样可…
HashSet定义 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable HashSet 是一个没有重复元素的集合.它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素.HashSet是非同步的.如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步.…