Java容器总结
Posted yuwenS.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java容器总结相关的知识,希望对你有一定的参考价值。
1、Java容器
容器主要包括Collection和Map,Collection存储着对象的集合,Map存储着键值对(两个对象)的映射表
1.1、Collection
用来存放对象的数据结构,而且长度可变,可以存放不同类型的对象,并且还提供了一组操作成批对象的方法.Collection接口层次结构 中的根接口,接口不能直接使用,但是该接口提供了添加元素/删除元素/管理元素的父接口公共方法。由于List接口与Set接口都继承了Collection接口,因此这些方法对于List集合和Set集合是通用的
1.1.1、Set
Set是一个不包含重复数据的Collection
Set集合中元素是无序的,因为Set集合中没有下标
Set集合中元素不能重复,通常用来给元素去重
TreeSet:基于红黑树的实现,支持有序列操作,可以根据某个范围内查询数据,但是查询效率不如HashSet
HashSet:基于哈希表的实现,支持快速查找,但不支持有序列操作,并且失去了元素插入时的顺序信息,所以通过迭代出来的结果是不确定的
LInkedHashSet:具有HashSet的查找效率,又使用双链表维护元素的插入顺序
1.1.2、List
有序的collection,此接口可以让用户向列表中插入的元素的位置进行精准的控制,用户可以根据元素的整数索引来访问元素,并搜索列表中的元素。
元素都有下标
数据是有序的
允许存放重复元素
ArrayList:基于动态数组实现,可以随机访问
Vector:和ArrayList类似,但是它是线程安全的
LInkedList:基于双向链表的实现,只能顺序访问,但是可以在列表中快速的插入和删除元素。LinkedList还可以用作栈,队列和双向队列
Vector和ArrayList对比:
Vector 是同步的,因此开销就⽐ ArrayList 要⼤,访问速度更慢。最好使⽤ ArrayList ⽽不是 Vector,因为同步操作完全可以由程序员⾃⼰来控制
Vector 每次扩容请求其⼤⼩的 2 倍(也可以通过构造函数设置增⻓的容量),⽽ ArrayList 是 1.5 倍。
1.1.3、Queue
LinkedList:用于实现双向队列
PriorityQueue:基于堆结构的实现,可以用来实现优先队列
1.2、Map
被称为哈希表、散列表、常用于键值对结构的数据,键不能重复值可以重复
Map可以根据键来提取值
Map键不能重复,如果重复会把键对应的值给覆盖
Map存放的是无序的数据
Map初始容量是16,默认加载因子是0.75
TreeMap:基于红黑数的实现
HashMap:基于哈希表的实现
HashTable:和 HashMap 类似,但它是线程安全的,这意味着同⼀时刻多个线程同时写⼊ HashTable 不会导致数据不⼀致。它是遗留类,不应该去使⽤它,⽽是使⽤ ConcurrentHashMap 来⽀持线程安全,ConcurrentHashMap 的效率会更⾼,因为 ConcurrentHashMap 引⼊了分段锁
LinkedHashMap:使⽤双向链表来维护元素的顺序,顺序为插⼊顺序或者最近最少使⽤(LRU)顺 序
HashMap概述:
HashMap底层是一个Entry[ ]数组,当存放数据时,会根据hash算法来计算数据的存放位置
算法:hash(key)%n , n就是数组的长度,其实也就是集合的容量
当计算的位置没有数据的时候,会直接存放数据
当计算的位置,有数据时,会发生hash冲突/hash碰撞,解决的办法就是采用链表的结构,在数组中指定位置处已有元素之后插入新的元素,也就是说数组中的元素都是最早加入的节点
以上是关于Java容器总结的主要内容,如果未能解决你的问题,请参考以下文章