java 容器
2024-02-01 16:30:11 17 举报
AI智能生成
Java容器是Java编程语言中用于存储和管理数据的集合类。它们提供了一种高效、灵活和安全的方式来组织和管理数据,使得在编程过程中更加方便。Java容器主要包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等。这些容器类提供了丰富的方法来操作和处理数据,如添加元素、删除元素、查找元素、遍历元素等。此外,Java容器还具有线程安全的特性,可以在多线程环境下使用。总之,Java容器是Java编程中不可或缺的重要组成部分,它们为开发者提供了强大的工具来处理各种数据结构和算法问题。
作者其他创作
大纲/内容
概述
用于存储和操作数据对象的容器
Collection容器
Map容器
集合框架
接口
实现
数据结构与算法
List容器
ArrayList
ArrayList特点
底层数据结构数组
随机访问性能高(O1)
插入性能低,需要进行数组的复制移动
多线程怎样使用ArrayList?
使用:Collections.synchronizedList
使用:Collections.synchronizedList
ArrayList 中 elementData的 transient 修饰
LinkedList
Vector
Queue队列
BlockingQueue阻塞队列
迭代器 Iterator
遍历+移除元素示例
ListIterator
ListIterator代码示例
添加
替换
获取索引
Set容器
HashSet容器
HashSet如何保证数据唯一
Map容器
HashMap
put 添加数据流程
借助key的hashcode实现Hash散列算法,计算出key在数组中下标位置
将值填入数组位置下标时,判断下标位置上是否有值,没有值直接将数据放在下标位置上
如果下标位置上有值,通过 equal进行比较,如果为true直接替换数组下标中的值。
如果equal为false,判断是链表或红黑树,如果是链表继续判断链表长度,小于8 将数据插入链表中。如果达到8且数组长度大于64(小于64优先扩容),则转为红黑树,将数据插入到红黑树中。
扩容流程
扩容触发条件++size > threshold,当前map大小大于扩容阈值。调用resize();方法进行扩容
扩容底层数组大小为原来的两倍
newCap = oldCap << 1
扩容阈值也为原来的两倍
newThr = oldThr << 1;
newCap = oldCap << 1
扩容阈值也为原来的两倍
newThr = oldThr << 1;
创建扩容后的底层数组:
Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];
table = newTab;
Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];
table = newTab;
将数据从老数组中迁移到新数组
HashTable
ConcurrentHashmap
ConcurrentHashMap如何保证线程安全?(jdk8)
不存在Hash冲突
jdk8中采用CAS操作保证线程安全
存在Hash冲突
jdk8中在对链表或者红黑树操作时使用了同步锁Synchronized
集合工具类
comparable和comparator
Comparable泛型接口,实现compareTo方法,按照返回值的排序。如果当前对象小于、等于或大于另一个对象,则此方法返回负整数、零或正整数
代码示例
Comparator 接口也定义了一个 compare 方法,用于比较两个对象的大小。与 Comparable 不同,我们通常使用 Comparator 来定义自定义排序顺序。
代码示例
Collection 和 Collections 有什么区别
Collection是JAVA中集合的的顶层接口,它定义了操作集合的基本方法。
Collections是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用
于对集合中元素进行排序、搜索以及线程安全等各种操作。
于对集合中元素进行排序、搜索以及线程安全等各种操作。
0 条评论
下一页