目录
前言:
今天想来整理一下java中的集合类,关于为啥要用集合,就是在日常开发中需要对数据进行操作,运算,这个时候我们就需要用到了集合类。
概述:
首先想简单的引用一下其他博主的一张图。
原博客地址:https://blog.csdn.net/qq_42565099/article/details/80889884
一.List(有序,元素可重复)
注: 按照进入先后有序保存
(1) Arraylist
- 1.1 ArrayList 底层是数组,查询快,增删慢。
- 1.2 线程不安全,效率高。
(2) LinkedList
- 2.1 LinkedList 底层是链表,查询慢,增删快。
- 2.2 线程不安全,效率低。
(3) Vector
- 3.1 底层是数组,查询快,增删慢。
- 3.2 线程安全
(4)list的适用场景
一般情况下,用的比较多的是ArrayList ,适用于随机查询的情况。LinkedList 对集合中的元素更加方便的修改,更适用于大量修改的情况。Vector如果如果线程安全且对效率要求不高的情况下可以使用。
二.Set(无序,元素不可重复)
(1)HashSet
-
1.1 底层是哈希表,哈希表依赖hashcode 和equals俩个方法。
-
1.2 只要add() remove() 以及contains()等方法
判断原理:首先判断俩个值hashcode值是否相等,第一层:是的话执行equals()方法,返回结果为true 如何元素重复,不可添 加。返回 结果为false 将该元素添加到集合当中,第一层:否的话,将元素添加到集合当中。
(2)TreeSet(有序)
- 2.1 底层数据结构是二叉树。
- 2.2 有序。
(3) LinkedHashSet
- 3.1 介于HashSet 和TreeSet之间,它也是一个hash表,但它同时维护了一个双链表来记录插入的顺序
三.Map
Map当中用来索引的键代表key 其对应的值是value。Map有四个实现类 HashMap HashTable TreeMap LinkedHashMap
(1) HashMap
- 1.1 底层数据结构是hash表
- 1.2 无序
- 1.3 最多允许一条数据的键为null
- 1.4 不支持线程同步,如果当前是多线程的话,使用HashMap 可能会导致数据不一致。如果需要同步,可以用 Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。(线程安全)
(2) TreeMap
- 2.1 底层数据结构是二叉树。
- 2.2 有序
- 2.3 实现SortMap 接口,默认是按照键值的升序排序。
(3) LinkedHashMap
- 3.1 HashMap 的子类,保存了记录的插入顺序。
- 3.2 LinkedHashMap的遍历速度与数据大小有关,与容量无关,而HashMap的遍历速度和它的容量有关。
(4) HashTable
- 3.1 与hashMap 类似,不允许记录的键或者值为null
- 3.2 支持线程同步。即同一时刻只能有一个线程读取HashTable中的值。线程安全。
- 3.3 无序。
(5) HashMap 和TreeMap 的相同点
- 3.1 都是线程不安全的
(6) HashMap 和TreeMap的不同点
- 4.1 HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值;
- 4.2 TreeMap继承SortedMap类;他保持键的有序顺序;
-
4.3 HashMap:适用于Map插入,删除,定位元素,TreeMap:适用于按自然顺序或自定义顺序遍历键(key)
(7) 如何遍历Map
引自:https://www.cnblogs.com/quehai/p/10845379.html
(8) Map的适用场景
一般情况下,我们用的最多的是HashMap,在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。如果需要输出的顺序和输入的相同,那么用LinkedHashMap 可以实现。
四.数组和集合的区别
- 声明数组的时候需要指定元素的类型,而集合可以不需要。
- 数组中只能存放相同类型的元素,而集合可以存放不同的类型(泛型)
- 声明一个集合需要指定它的大小长度,一旦创建就无法改变容量,而集合可以动态扩展容量。
五.好文章
good: https://blog.csdn.net/zhangqunshuai/article/details/80660974
六.List 和Set的相互转化
https://blog.csdn.net/kye055947/article/details/80561633
以上是我自己的一个小总结,总结的还不是很完善,如果有的有什么不正确的地方欢迎指出,共同进步,加油!