Java-集合框架

Collection集合

Collection集合总结

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Collection
|---List 有序,可重复
|---ArrayList
底层数据结构是数组,查询快,增删慢。
线程不安全,效率高
|---Vector
底层数据结构是数组,查询快,增删慢。
线程安全,效率低
|---LinkedList
底层数据结构是链表,查询慢,增删快。
线程不安全,效率高
|---Set 无序,唯一
|---HashSet
底层数据结构是哈希表。
如何保证元素唯一性的呢?
依赖两个方法:hashCode()和equals()
开发中自动生成这两个方法即可
|---LinkedHashSet
底层数据结构是链表和哈希表
由链表保证元素有序
由哈希表保证元素唯一
|---TreeSet
底层数据结构是红黑树。
如何保证元素排序的呢?
自然排序
比较器排序
如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定

Collection使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
针对Collection集合我们到底使用谁呢?(掌握)
唯一吗?
是:Set
排序吗?
是:TreeSet
否:HashSet
如果你知道是Set,但是不知道是哪个Set,就用HashSet。

否:List
要安全吗?
是:Vector
否:ArrayList或者LinkedList
查询多:ArrayList
增删多:LinkedList
如果知道是List,但是不知道是哪个List,就用ArrayList。

如果知道是Collection集合,但是不知道使用谁,就用ArrayList。

如果知道用集合,就用ArrayList。

遍历方式

  1. 迭代器遍历
    • 注意:并发修改异常!
  2. 增强for
    • 注意:底层其实就是迭代器遍历!
  3. 普通for

集合中常见数据结构

1
2
3
4
5
在集合中常见的数据结构(掌握)
ArrayXxx : 底层数据结构是数组,查询快,增删慢
LinkedXxx : 底层数据结构是链表,查询慢,增删快
HashXxx : 底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx : 底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

Map集合

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map集合总结

1
2
3
4
5
6
7
Map
|---HashMap
键是哈希表结构,可以保证键的唯一性
|---LinkedHashMap
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
由哈希表保证唯一性
由链表保证有序性(存储和取出的顺序一致)

Map和Collection的区别

Map 存储的是键值对形式的元素,键唯一,值可以重复。夫妻对
Collection 存储的是单独出现的元素,子接口Set元素唯一,子接口List元素可重复。光棍

遍历方式

  1. 键找值
    • 获取所有键的集合
    • 遍历键的集合,得到每一个键
    • 根据键到集合中去找值
  2. 键值对对象找键和值
    • 获取所有的键值对对象的集合
    • 遍历键值对对象的集合,获取每一个键值对对象
    • 根据键值对对象去获取键和值

栗子🌰:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Map<String,String> hm = new HashMap<String,String>();

hm.put("it002","hello");
hm.put("it003","world");
hm.put("it001","java");

//方式1 键找值
Set<String> set = hm.keySet();
for(String key : set) {
String value = hm.get(key);
System.out.println(key+"---"+value);
}

//方式2 键值对对象找键和值
Set<Map.Entry<String,String>> set2 = hm.entrySet();
for(Map.Entry<String,String> me : set2) {
String key = me.getKey();
String value = me.getValue();
System.out.println(key+"---"+value);
}

Collections工具类

1
2
3
4
5
6
7
8
9
10
(1)是针对集合进行操作的工具类
(2)面试题:Collection和Collections的区别
A:Collection 是单列集合的顶层接口,有两个子接口List和Set
B:Collections 是针对集合进行操作的工具类,可以对集合进行排序和查找等
(3)常见的几个小方法:
A:public static <T> void sort(List<T> list)
B:public static <T> int binarySearch(List<?> list,T key)
C:public static <T> T max(Collection<?> coll)
D:public static void reverse(List<?> list)
E:public static void shuffle(List<?> list)

注意:在Collection中有一些线程不安全的集合类,当在需要多线程操作的时候,可以使用这个工具类来将线程不安全的集合转为一个线程安全的集合。


文章作者: ahoj
文章链接: https://ahoj.cc/2019/02/Java-集合框架/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ahoj 的小本本