【Java集合相关知识点的简单总结】

1. 集合相关知识点

1. 集合体系概述


顶层两大接口 CollectionMap 两者 平级

Collection : List(有序) Set(无序) 两个子接口
1. List :
1. ArrayList (底层是数组) 特点 查询快 增删慢 线程不安全
2. Vector 线程安全
3. LinkedList(底层是双向链表) 特点 查询慢 增删快
2. Set :
1.TreeSet
2.HashSet 特点 : 相当于自然排序 存储无序 元素唯一 , 重写了 HashCode .equals
3. LinkedHashSet 特点 : 存取有序 元素唯一 底层是 链表 + hash表

Map <K,V> : HashMap LinkedHashMap HashTable
  • 1. HashMap : 键值对存储 key 值唯一 且可以为 null 线程不安全 初始容量 为 16
  • 2. LinkedHashMap : 有序
  • 3. HashTable : key 值不能 null value 也不能 为 null 线程安全
      • properties 一般在 读取 配置文件 用到

2. 集合的经典面试题

1. ArrayList LinkedList HashMap 的底层实现方式
ArrayList
1. ArrayList 底层是通过数组实现 一旦我们实例化 ArrayList 无参数构造函数 默认数组初始化长度 10
2. add() 方法 底层实现如果增加元素个数超过了 10 个 那么 ArrayList 底层会产生一个数组 长度为原来的1.5 倍 然后将原数组的内容 复制 到新数组 中 当新数组无法容纳新增的元素时 重复该过程
LinkedList
1. LinkedList 底层的数组结构是基于双向循环链表的 且 头结点中是不存放数据的

2. 双向链表 存在的一种数据结构 ---- 节点

节点 : 实现保存业务 前一个节点的位置信息 后一个节点的位置信息



HashMap
数组 + 链表
根据 key 的 hash值确定 该存储的下标位置 如果多个 Key的hash值相同 那么这些元素会以链表的形式存放 新的放在链头 而原来的元素放在链尾
2. HashMap 和 Hashtable 区别


HashMap 是 HashTable 的一个轻量级实现 (非线程安全的实现) 她们都完成了Map接口 主要区别在于 HashMap 允许空 (null) 键值(key) 由于非线程安全 在只有一个线程访问的情况下 效率高于Hashtable

HashMap允许将 null 作为一个 entry 的key 或者 value 而 HashTable 不允许
HashMap把HashTable的 contians 方法去掉了 改成了 contiansvalue 和 contiansKey 因为 contains 方法容易让人误解
HashTable 继承自 Dictionary 类 而 HashMap 是 java 1.2 引进的 Map interface 的一个实现
最大的不同是 ; Hashtable 的方法是 Synchronize 的 而 HashMap 不是 在多个线程访问 Hashtable 时 不需要自己为它的方法实现同步 而 HashMap 的 必须提供外同步

1. 历史原因 HashTable 继承自 Dictionary 类 而 HashMap 是 java 1.2 引进的 Map interface 的一个实现
2. 同步性 : Hashtable 是线程安全的,也就是说是同步的,而 HashMap 是线程序不安全的,不是同步的  
3. 值 : 只有 HashMap 可以让你将空值 作为一个 表的条目的 key 和 value

3.HashMap的工作原理

HashMap 是基于 hashing 原理 我们通过put() 和 get() 方法储存和获取对象 当我们将键值对传递给 put()方法时 他调用键对象的 hashCode()方法来计算 hashCode 让后找到 bucket 位置来 储存值对象 当获取对象时 通过键对象的 equals() 方法 找到正确的 键值对 然后返回 值对象 HashMap 使用链表来解决碰撞问题 当发生碰撞了 对象将会储存在 链表的 下一个 节点中 HashMap在每个链表节点中储存键值对对象

当两个不同的键对象的 HashCode 相同时 会发生什么
他们会储存在同一个 bucket 位置的链表中 键对象的 equals 方法 用来找到键值对

4 Collection 和 Collections 的区别

Collection 是集合类的上级接口 继承与他的接口主要有 Set 和 List
Collection 是结合类的一个帮助类 他提供一系列静态方法实现对各种 集合的搜索。排序。线程安全化等操作

猜你喜欢

转载自blog.csdn.net/ls490447406/article/details/79739408