Java的集合类
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java的集合类,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3021字,纯文字阅读大概需要5分钟。
内容图文
![Java的集合类](/upload/InfoBanner/zyjiaocheng/613/bc47bb8442044e2f9fce2a8ed8fe4fef.jpg)
List,Set,Map的区别?
List:链表,有序,可出现重复元素
Set:集合,无序,不允许重复。
Map: 键值对存储。Key不能重复,但不同的Key可以指向相同的对象。
Arraylist、LinkedList、Vector区别?
\1. ArrayList和LinkedList 都是线程不安全;
\2. Arraylist底层使?Object 数组; LinkedList 底层使?双向链表
3.ArrayList适合通过index快速随机访问,LinkedList适合频繁的插入和删除。
\4. ArrayList在list列表的结尾会预留?定的容量空间,LinkedList还要存放前驱和后继
Vector 类的?法是同步的。但是?个线程访问Vector同步操作会耗费?量时间。
ArrayList的扩容?
有3个不同的构造方法。
无参构造方法ArrayList容量默认为10(注意,最开始初始化时是一个空数组。添加元素时,才真正分配容量。即数组添加第一个元素时,容量才扩为10。)
带初始容量参数的构造函数。(自己指定容量)
带Collection参数的构造方法,将Collection转为数组,然后赋给ArrayList的实现数组elementData。
ensureCapacity()方法 在ArrayList 内部没被调用,是留给用户调用的。
为了添加大量元素时,确保容量足够,减少容量重新分配的次数。ArrayList在每次增加元素(可能是1个,也可能是一组)时,都要调用该方法来确保足够的容量。当容量不足以容纳当前的元素个数时,就设置新的容量为旧的容量的1.5倍加1,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后用Arrays.copyof()方法将元素拷贝到新的数组(详见下面的第3点)。从中可以看出,当容量不够时,每次增加元素,都要将原来的元素拷贝到一个新的数组中,非常之耗时,也因此建议在事先能确定元素数量的情况下,才使用ArrayList,否则建议使用LinkedList。
HashMap、HashSet
HashMap:实现了Map接?,存储键值对,调?put()添加元素,使?Key计算Hashcode
HashSet:实现Set接?,仅存储对象,调? add()添加元素,使?成员对象来计算hashcode值,若hashcode相同,再用equals()?法判断对象是否相等
HashMap、Hashtable 的区别
HashMap:?线程安全,效率??点
HashTable:线程安全,经过 synchronized 修饰。但已经淘汰,如果要保证线程安全? ConcurrentHashMap
HashMap 允许存在一个空键,多个空值。HashTable则不允许,若存在空键或空值,则报空指针异常
Hashtable 默认容量为11,每次扩充为2n+1。HashMap 默认容量为16。每次扩充为2倍。 Hashtable 可以直接使用指定容量,? HashMap 只能指定为2的n次???
(因为哈希映射的范围将近40亿?度的数组,内存不好存,所以要把哈希转换为数组,即取模,而实际中采用 (n - 1) & hash的与运算 来计算数组下标,因为位运算效率更高。
而Hash%length=hash & (length-1)的前提是:length 为2的n 次?)
JDK1.8 以后 HashMap 的链表?度?于阈值(8)时,会将链表转化为红?树。Hashtable 没有这样的机制。
*HashMap:*
JDK1.7
JDK1.8
ConcurrentHashMap和 Hashtable的区别
ConcurrentHashMap:JDK1.7采?分段数组+链表实现,JDK1.8采?数组+链表/红?树。Hashtable一直采?数组+链表
实现线程安全的?式(重要):
① ConcurrentHashMap:在JDK1.7,使用分段锁对数组进?分段(Segment),每?把锁只锁容器中的?部分数据,不同数据段的数据,不存在锁竞争
JDK1.8时,采用 Node 数组+链表/红?树实现,并发控制使? synchronized 和CAS实现。② Hashtable:使? synchronized 保证线程安全,整个链表都一起锁住 ,效率?常低。当?个线程访问同步?法时,其他线程也访问同步?法时,可能会阻塞或轮询,
如:一个线程? put 添加元素,另?个线程不能同时put,也不能get获取。
取。
[外链图片转存中…(img-bN2yYMcr-1609859952266)]
[外链图片转存中…(img-RoU3OBtK-1609859952267)]
内容总结
以上是互联网集市为您收集整理的Java的集合类全部内容,希望文章能够帮你解决Java的集合类所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。