集合
--------------------------------------------------------------------------------------------------------
变量:只能存 一个 数据;
数组:可以存很多数据,基本,引用,长度固定。
----------------------------------------------------------------------------------------------
集合 和 数组比较:集合 和 数组都是容器,都可以存储很多数据;
1.数组 长度是固定的;集合 可以自动扩容;
2.数组 可以存储 基本 ,引用类型; 集合 只能存储引用类型的。
3.集合 底层有复杂的数据结构 支持,效率上 不如数组。
-----------------------------------------------------------------------------------------------
Collection 接口 :可以重复,无序
|
List 接口 :可以重复,有序,线性排列
|
实现类:ArrayList,Vector,LinkedList
---------------------------------------------------------------------------------------------------------------
实现类的异同:
ArrayList和Vector底层 数据结构 是 数组;遍历 和 随机访问 快,添加,删除 效率低。
ArrayList:线程非安全的。
1.2出现,性能高一些;
Collections方法包装成线程安全的使用。
50%扩容。
Vector:线程安全的。
1.0出现很早,性能差。
100%扩容。
Stack栈 :继承Vector,效率低
LinkedList底层 数据结构 是链表;遍历 和 随机访问 慢,添加 ,删除 效率高。
---------------------------------------------------------------------------------------------------------
Collection接口
|
Set 接口:不重复,无序。
| HashSet ->LinkedHashSet
SortedSet 接口:排了序的
|
NavigableSet接口
|
TreeSet类
------------------------------------------------------------------------------------------------------------
HashSet
Hash底层数据 结构 :是 哈希表。
Hash存储唯一方式:
首先 对象调用 hashCode()根据对象的自身特征算出 一个 hash值(位置值),没有冲突 可以存储,但是 遇到了 哈希冲突 (hashcode()算出的值都相同),这时 调用equals()判断 是否为同一个对象,是就不存了 ,不是 可以 同一个位置 链式存储。
---------------------------------------------------------------------------------------------------------------
TreeSet:
底层数据结构是 二叉树。
树:表示 一种层次关系。
-----------------------------------------------------------------------------------------------------------
实现类的区别:
HashSet 底层 哈希表; 数据唯一存储;效率高于 LinkedHashSet 和 TreeSet
LinkedHashSet:底层 是链表 哈希表;按照 元素 添加的顺序维护。
TreeSet :底层是 二叉树。按照 升序 维护次序(自然升序),也可自己指定次序。
--------------------------------------------------------------------------------------------------------------
Queue
| ------> PriorityQueue
Deque双端队列
|
ArrayDeque
LinkedList
注意:队列 不允许 添加null的;但是LinkedList可以 填null
Deque:
----------------------------------------------------------------------------------------
Map 接口 :存储 键值对 (映射)
| HashMap -> LinkedHashMap
SortedMap
|
NavigableMap
|
TreeMap类
---------------------------------------------------------------------------------------------------
HashMap、LinkedHashMap、TreeMap、Hashtable的区别?
无序:
HashMap:非安全的,可以null键和null值存储。
Hashtable:线程安全的,性能低。
有序:
LinkedHashMap: 添加的顺序。
TreeMap:key 自然升序排列,或自己指定顺序。