目录
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. 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:底层由链表实现,查询慢,增删快。线程不安全,效率高。
Set-无序唯一
Map-键值对存储