网站首页 > java教程 正文
特 性 | |||||||||
集合名称 | 超类或接口 | 关键特性 | 线性安全 | 线性安全机制 | 是否有序 | 排序验证 | 排序策略 | 底层数据结构 | 是否允许元素重复 |
ArrayList | AbstractList->AbstractCollection->Collection->Iterable | 动态数组,适合随机访问get和set; | 否 | 有 | ArrayList插入:1,3,5,2 | 插入顺序 | 动态数组 | 允许 | |
List->Collection->Iterable | 不适合大批量插入数据,因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。 | ->1->3->5->2 | |||||||
LinkedList | AbstractSequentialList->AbstractList->AbstractCollection->Collection->Iterable | 基于链表,add和remove有优势,对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。 | 否 | 有 | LinkedList插入:1,3,5,2 | 插入顺序 | 链表 | 允许 | |
List->Collection->Iterable | ->1->3->5->2 | ||||||||
HashSet | AbstractSet->AbstractCollection->Collection->Iterable | 否 | 否 | HashSet插入:1,3,5,2 | 无 | 哈希表 | 不允许 | ||
Set->Collection->Iterable | ->3->2->1->5 | ||||||||
TreeSet | AbstractSet->AbstractCollection->Collection->Iterable | 否 | 有 | TreeSet插入:1,3,5,2 | 二叉排序树 | 红黑树。(是一种自平衡的二叉树) | 不允许 | ||
NavigableSet->SortedSet->Set->Collection->Iterable | ->1->2->3->5 | (默认:插入值升序) | |||||||
LinkedHashSet | HashSet->Set->Collection->Iterable | 否 | 有 | LinkedHashSet插入:1,3,5,2 | 插入顺序 | 链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素唯一。 | 不允许 | ||
->1->3->5->2 | |||||||||
Vector | List->Collection->Iterable | 底层数据结构是数组,查询快,增删慢 | 是 | synchronized | 有 | Vector插入:1,3,5,2 | 插入顺序 | 动态数组 | 允许 |
线程安全,效率低 | ->1->3->5->2 | ||||||||
Stack | Vector->List->Collection->Iterable | 是 | synchronized | 有 | Stack插入:1,3,5,2 | 插入顺序 | 动态数组 | 允许 | |
->1->3->5->2 | |||||||||
HashMap | AbstractMap->Map | 否 | 无 | HashMap插入:1,3,5,2 | 哈希表 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | |||
3-->3-key.hashCode=51 | |||||||||
2-->2-key.hashCode=50 | |||||||||
1-->1-key.hashCode=49 | |||||||||
5-->5-key.hashCode=53 | |||||||||
LinkedHashMap | HashMap->AbstractMap->Map | 否 | 有 | LinkedHashMap插入:1,3,5,2 | 插入顺序 | 由双向链表和哈希表组成。 由链表保证元素有序。 由哈希表保证元素唯一。 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
1-->1-key.hashCode=49 | |||||||||
3-->3-key.hashCode=51 | |||||||||
5-->5-key.hashCode=53 | |||||||||
2-->2-key.hashCode=50 | |||||||||
ConcurrentHashMap | AbstractMap->Map | 是 | 分段加锁 | 无 | ConcurrentHashMap插入:1,3,5,2 | Segment数组结构和HashEntry数组结构组成 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
ConcurrentMap->Map | 1-->1-key.hashCode=49 | ||||||||
5-->5-key.hashCode=53 | |||||||||
3-->3-key.hashCode=51 | |||||||||
2-->2-key.hashCode=50 | |||||||||
TreeMap | AbstractMap->Map | 否 | 有 | TreeMap插入:1,3,5,2 | 二叉排序树-红黑树 | 红黑树 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
NavigableMap->SortedMap->Map | 1-->1-key.hashCode=49 | (默认:插入值升序 | |||||||
2-->2-key.hashCode=50 | |||||||||
3-->3-key.hashCode=51 | |||||||||
5-->5-key.hashCode=53 | |||||||||
WeakHashMap | AbstractMap->Map | 弱引用(WeakReference) | 否 | 无 | WeakHashMap插入:1,3,5,2 | 哈希表 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。 | 5-->5-key.hashCode=53 | ||||||||
WeekHashMap 的这个特点特别适用于需要缓存的场景。在缓存场景下,由于内存是有限的,不能缓存所有对象;对象缓存命中可以提高系统效率,但缓存MISS也不会造成错误,因为可以通过计算重新得到。 | 1-->1-key.hashCode=49 | ||||||||
2-->2-key.hashCode=50 | |||||||||
3-->3-key.hashCode=51 | |||||||||
HashTable | Dictionary | 是 | synchronized | 无 | HashTable插入:1,3,5,2 | 哈希表 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
Map | 5-->5-key.hashCode=53 | ||||||||
3-->3-key.hashCode=51 | |||||||||
2-->2-key.hashCode=50 | |||||||||
1-->1-key.hashCode=49 | |||||||||
IdentityHashMap | AbstractMap->Map | 在IdentityHashMap中,当且仅当两个key严格相等(key1==key2:即内存地址要相等)时,IdentityHashMap才认为两个key相等;相对于普通HashMap而言,只要key1和key2通过equals()方法返回true,且它们的hashCode值相等即可。 | 否 | 无 | IdentityHashMap插入:1,3,5,2 | 哈希表 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
3-->3-key.hashCode=51 | |||||||||
2-->2-key.hashCode=50 | |||||||||
1-->1-key.hashCode=49 | |||||||||
5-->5-key.hashCode=53 | |||||||||
EnumMap | Enum | 否 | 有 | EnumMap插入:1,3,5,2 | 插入顺序 | 动态数组 | 使用key-value来映射和存储数据,key必须唯一,value可以重复 | ||
AbstractMap->Map | {SPRING=1, SUMMER=3, FAIL=5, WINTER=2} |
- 上一篇: Java集合细说(java中集合详解)
- 下一篇: JAVA集合(java集合和数组的区别)
猜你喜欢
- 2024-11-17 三句话都能解释清楚的java集合类HashSet,你清楚吗?
- 2024-11-17 Java常用的并发集合类(java中的并发是什么意思)
- 2024-11-17 数据结构之集合体系概览 带你了解集合体系中有哪些重要的分类
- 2024-11-17 能懂系列之 List 集合详解(list集合的方法)
- 2024-11-17 100个Java工具类之1:多种集合类型实现排序功能
- 2024-11-17 Java 集合体系有什么?(一)(java集合概述)
- 2024-11-17 「软帝学院」java集合类框架,你了解多少?一
- 2024-11-17 面试官问道:关于java集合类你都搞懂了吗?学会怒怼面试官
- 2024-11-17 跟我学编程 5:Java中常见的集合 知多少?
- 2024-11-17 Java多线程环境下使用的集合类示例详解
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)