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容器总结的主要内容,如果未能解决你的问题,请参考以下文章

Java 容器相关知识全面总结

Java容器总结

Java 常见并发容器总结

Java---容器基础总结

Java容器总结

Java集合总结:列表和队列