集合List Set Map等讲解

目录

 

前言:

概述:

一.List(有序,元素可重复)

(1) Arraylist 

(2) LinkedList

(3) Vector 

(4)list的适用场景

二.Set(无序,元素不可重复)

(1)HashSet

(2)TreeSet(有序)

(3) LinkedHashSet

三.Map 

(1) HashMap

(2) TreeMap

(3) LinkedHashMap

(4) HashTable

(5) HashMap 和TreeMap 的相同点

(6) HashMap 和TreeMap的不同点

(7) 如何遍历Map

(8) Map的适用场景

四.数组和集合的区别

五.好文章

六.List 和Set的相互转化


前言:

今天想来整理一下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 可以实现。

四.数组和集合的区别

  1. 声明数组的时候需要指定元素的类型,而集合可以不需要。
  2.  数组中只能存放相同类型的元素,而集合可以存放不同的类型(泛型)
  3. 声明一个集合需要指定它的大小长度,一旦创建就无法改变容量,而集合可以动态扩展容量。

五.好文章

good:  https://blog.csdn.net/zhangqunshuai/article/details/80660974

六.List 和Set的相互转化

https://blog.csdn.net/kye055947/article/details/80561633

以上是我自己的一个小总结,总结的还不是很完善,如果有的有什么不正确的地方欢迎指出,共同进步,加油!

发布了46 篇原创文章 · 获赞 42 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/104112865