栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

简述Java中的集合体系以及HashMap的原理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

简述Java中的集合体系以及HashMap的原理

单列集合:Collection                         List、Set、Queue                         List--> ArrayList、linkedList、Vector                         Set--> HashSet、linkedHashSet、TreeSet 单列集合:Map                         Hashtable、linkedHashMap、HashMap、TreeMap、ConcurrentHashMap

List 有序,可重复 ArrayList 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程不安全,效率高 linkedList 优点: 底层数据结构是链表,查询慢,增删快。 缺点: 线程不安全,效率高 Vector 优点: 底层数据结构是数组,查询快,增删慢。 缺点: 线程安全,效率低 Set 无序,唯一

HashSet 底层数据结构是哈希表。(无序,唯一) 如何来保证元素唯一性? 1.依赖两个方法:hashCode()和equals() linkedHashSet 底层数据结构是链表和哈希表。(FIFO插入有序,唯一) 1.由链表保证元素有序 2.由哈希表保证元素唯一 TreeSet 底层数据结构是红黑树。(唯一,有序) 1. 如何保证元素排序的呢? 自然排序 比较器排序2.如何保证元素唯一性的呢? 根据比较的返回值是否是0来决定 Map Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。 TreeMap是有序的,HashMap和HashTable是无序的。 Hashtable是线程安全的,HashMap不是线程安全的。 HashMap效率较高,Hashtable效率较低。 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看 Hashtable的源代码 就可以发现,除构造函数外,Hashtable的所有 public 方 法声明中都有 synchronized关键字,而HashMap的源码中则没有。 Hashtable不允许null值,HashMap允许null值(key和value都允许) 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap HashMap的实现原理: 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的 hashCode 经 过扰动函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这 里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素 的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲 突; JDK1.8之后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时, 将链表转化为红黑树,以减少搜索时间; HashMap默认长度16、达到75%的阀值会自动按其两倍的长度扩容;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号