目录
Java集合框架中类和接口之间的关系
首先,我发现了这样一幅图比较形象的描述
了Java集合框架中类和接口之间的关系:
第一张图(左):
Collection继承了Iterable接口。List是链表 ,Queue 是队列, Set 是集合,注意集合中的元素是不能重复的。AbstractList是抽象队列,继承了List;Deque是双端队列,继承了Queue; SortedSet是排序集合,继承了Set。
详细看看底下的类我们会发现
1. stack是栈,继承了Vector
2. ArrayList是顺序表,底层是用数组实现的
3. LinkedList是链表,底层是用双向链表实现的
4. PriorityQueue是优先级队列,底层是用堆(二叉树)实现的
5. TreeSet是二叉搜索树(排序)
6. HashSet是哈希表
接口之间的关系:
1.
Collection
:用来存储管理一组对象
objects
,这些对象一般被成为元素
elements
2.
Set
:
元素不能重复,背后隐含着
查找
/
搜索
的语义
3.
SortedSet
:
一组有序的不能重复的元素
4.
List
:
线性结构
5.
Queue
:
队列
6.
Deque
:
双端队列
7.
Map
:
键值对
Key
-
Value
-
Pair
,背后隐含着
查找
/
搜索
的语义
8.
SortedMap
:
一组有序的键值对
第二张图(右):
1. HashMap 实现了Map,是哈希表(不具有排序功能)
2. TreeMap 实现了SortMap,是二叉搜索树(具有排序功能)
ps:
Map存放数据根据key的值,进行哈希。然后存放到哈希表的对象的index下标的位置
key值一般不重复(如果重复会被覆盖)
哈希表的CURD的时间复杂度是O(1)
Collection常用方法
|
|
|
|
|
|
|
|
|
|
|
|
Map常用方法
V get(Object k);
|
根据指定的 k 查找对应的 v |
V getOrDefault(Object k, V defaultValue);
|
根据指定的 k 查找对应的 v,没有找到用默认值代替 |
V put(K key, V value)
|
将指定的 k-v 放入 Map |
boolean containsKey(Object key)
|
判断是否包含 key |
boolean containsValue(Object value)
|
判断是否包含 value |
Set<Map.Entry<K, V>> entrySet()
|
将所有键值对返回 |
boolean isEmpty()
|
判断是否为空 |
int size()
|
返回键值对的数量 |
基本打印方式
基本方式主要有三种:
1.直接打印
System.out.println(list);
2.for-each打印(一个类只有实现Iterable接口,才能用for-each打印)
for(Map.Entry<String,String> entry : map.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
3.Array
System.out.println(Arrays.asList());
List、Map、Set的应用场景
List-有序可重复
ArrayList:底层由数组实现,查询快,增删慢。线程不安全,效率高。
Vector:底层由数组实现,查询快,增删慢。线程安全,效率底。
LinkedList:底层由链表实现,查询慢,增删快。线程不安全,效率高。