容器
容器是通过数据结构与算法的封装与扩展,对外提供数据的存错与操作。
常用的数据结构是:数组(array)、栈(stack)、链表(linked list)、队列(queue)、树(tree)、图(graph)、堆(heap)、散列表(hash)等。这些数据结构各自有自己的优点与缺点,根据它们的特性就有了如下的Java集合框架图。
集合主要有:List、Set、Map和Queue,但是一般在开发中使用List、Set、Map这三个比较多。
根据底层的实现方法,会有以下的集合:
Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序
Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap
其中Collections和Arrays是工具类。Collections是集合的工具类,Arrays是Array的工具类。注意:Collections(集合工具类)与Collection(集合),Arrays(数组工具类)与Array(数组)是不相同的,注意区分。
集合和数组的区别
长度区别
- 数组固定。
- 集合可变。
内容区别
- 数组可以是基本类型,也可以是引用类型。
- 集合只能是引用类型。
元素区别:
- 数组只能存储同一种类型。
- 集合可以存储不同类型(其实 集合一般存储的也是同一种类型)。
List和Set的区别
有序性
- List保证按插入顺序排序
- Set存储和取出顺序不一致
唯一性
- List可以重复
- Set元素唯一
获取元素
- List可以通过索引直接操作元素
- Set不能根据索引获取元素
HashMap(重点)
java中Map及Map.Entry详解
HashMap深度分析详解
hashmap hash冲突怎么解决_HashMap面试必问的6个点,你知道几个?
面试阿里,HashMap 这一篇就够了
HashMap常见面试题整理
参考
java集合超详解
Java集合容器面试题(2020最新版)