搭积木建网站软件,医院网站建设需求分析调研表,创建全国文明城市调查问卷答案,企业官网建站系统文章目录 1.1. Java 集合概览1.2. 说说 List,Set,Map 三者的区别#xff1f;1.3. 集合框架底层数据结构总结1.3.1. List1.3.2. Set1.3.3. Map 1.4. 如何选用集合?1.5. 为什么要使用集合#xff1f; 1.1. Java 集合概览
从下图可以看出#xff0c;在 Java 中除了以 Map 结尾… 文章目录 1.1. Java 集合概览1.2. 说说 List,Set,Map 三者的区别1.3. 集合框架底层数据结构总结1.3.1. List1.3.2. Set1.3.3. Map 1.4. 如何选用集合?1.5. 为什么要使用集合 1.1. Java 集合概览
从下图可以看出在 Java 中除了以 Map 结尾的类之外 其他类都实现了 Collection 接口。
并且以 Map 结尾的类都实现了 Map 接口。
1.2. 说说 List,Set,Map 三者的区别
List(对付顺序的好帮手) 存储的元素是有序的、可重复的。Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。Map(用 Key 来搜索的专家): 使用键值对kye-value存储类似于数学上的函数 yf(x)“x”代表 keyy代表 valueKey 是无序的、不可重复的value 是无序的、可重复的每个键最多映射到一个值。
1.3. 集合框架底层数据结构总结
先来看一下 Collection 接口下面的集合。
1.3.1. List
Arraylist Object[]数组VectorObject[]数组LinkedList 双向链表(JDK1.6 之前为循环链表JDK1.7 取消了循环)
1.3.2. Set
HashSet无序唯一: 基于 HashMap 实现的底层采用 HashMap 来保存元素LinkedHashSetLinkedHashSet 是 HashSet 的子类并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样不过还是有一点点区别的TreeSet有序唯一 红黑树(自平衡的排序二叉树)
再来看看 Map 接口下面的集合。
1.3.3. Map
HashMap JDK1.8 之前 HashMap 由数组链表组成的数组是 HashMap 的主体链表则是主要为了解决哈希冲突而存在的“拉链法”解决冲突。JDK1.8 以后在解决哈希冲突时有了较大的变化当链表长度大于阈值默认为 8将链表转换成红黑树前会判断如果当前数组的长度小于 64那么会选择先进行数组扩容而不是转换为红黑树时将链表转化为红黑树以减少搜索时间LinkedHashMap LinkedHashMap 继承自 HashMap所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外LinkedHashMap 在上面结构的基础上增加了一条双向链表使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作实现了访问顺序相关逻辑。详细可以查看《LinkedHashMap 源码详细分析JDK1.8》Hashtable 数组链表组成的数组是 HashMap 的主体链表则是主要为了解决哈希冲突而存在的TreeMap 红黑树自平衡的排序二叉树
1.4. 如何选用集合?
主要根据集合的特点来选用比如我们需要根据键值获取到元素值时就选用 Map 接口下的集合需要排序时选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap。
当我们只需要存放元素值时就选择实现Collection 接口的集合需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSet 或 HashSet不需要就选择实现 List 接口的比如 ArrayList 或 LinkedList然后再根据实现这些接口的集合的特点来选用。
1.5. 为什么要使用集合
当我们需要保存一组类型相同的数据的时候我们应该是用一个容器来保存这个容器就是数组但是使用数组存储对象具有一定的弊端 因为我们在实际开发中存储的数据的类型是多种多样的于是就出现了“集合”集合同样也是用来存储多个数据的。
数组的缺点是一旦声明之后长度就不可变了同时声明数组时的数据类型也决定了该数组存储的数据的类型而且数组存储的数据是有序的、可重复的特点单一。 但是集合提高了数据存储的灵活性Java 集合不仅可以用来存储不同类型不同数量的对象还可以保存具有映射关系的数据。