概述
Java 集合
Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
Collection
其中,List接口存储一组不唯一、有序插入的对象,能够通过索引访问元素;Queue接口保证先进先出,可以被定义为有序列表;Set接口对collection进行扩展,存储一组唯一、无序的对象。
Set vs List
Set元素唯一、无序;List元素不唯一、有序
Set检索效率低,增删效率高且不会引起元素位置改变;List检索效率高,增删效率低且引起元素位置改变
Collection为什么不直接实现 Iterator 接口?
https://blog.csdn.net/qq_42776429/article/details/82470380
List
ArrayList
ArrayList类继承自 AbstractList 类并实现 List接口,使用动态数组来存储元素,与C++中的Vector类似。它是non synchronized(非同步的),操作效率略慢于LinkedList。
1.构造函数
Constructor | Description |
---|---|
ArrayList<E>() | 构建空的ArrayList |
ArrayList<E>(Collection<? extends E> c) | 构建一个ArrayList并使用c中的元素进行初始化 |
ArrayList<E>(int capacity) | 构建一个指定容量的ArrayList |
2.常用方法
https://www.runoob.com/java/java-arraylist.html
3.特点
-
只能充当List
-
get/set元素O(1),增删引起元素位置移动,更适合存储和访问数据
补充:
LinkedList
LinkedList 类使用双向链表来存储元素。它提供了一个链表数据结构。它继承了 AbstractList 类并实现了 List 和 Deque 接口。
1.构造函数
Constructor | Description |
---|---|
LinkedList<E>() | 构建空的ArrayList |
LinkedList<E>(Collection<? extends E> c) | 构建一个ArrayList并使用c中的元素进行初始化 |
2.常用方法
https://www.runoob.com/java/java-linkedlist.html
3.特点
-
可以充当List、Queue、Deque
-
查找O(n/2),增删不会引起元素位置改变,更适合操作数据
Set
HashSet
HashSet类基于散列的机制存储元素,元素唯一(允许null值)且不维护插入顺序(实际上按照hashcode插入),利于查找。HashSet类是非同步的,初始默认容量为16、负载因子为0.75。
1.构造函数
Constructor | Description |
---|---|
HashSet<E>() | 构建默认的HashSet |
HashSet<E>(int capacity) | 指定初始容量并构建HashSet |
HashSet<E>(Collection<? extends E> c) | 构建一个HashSet并使用c中的元素进行初始化 |
HashSet<E>(int capacity, float loadFactor) | 指定初始容量、负载因子并构建HashSet |
2.常用方法
https://www.runoob.com/java/java-hashset.html
注:
LinkedHashSet是HashSet的一个实现类,也是线程不安全的。除了HashSet的基本特性外,LinkedHashSet维护插入顺序。
TreeSet
TreeSet类使用树存储元素,元素是唯一的(不允许null值)且保持升序,访问和检索速度非常快。同样,TreeSet类也是线程不安全的。它继承自AbstractSet类并实现NavigableSet接口(扩展了SortedSet、Set、Collection和Iterable接口)。
Constructor | Description |
---|---|
TreeSet<E>() | 构建默认的TreeSet,按照自然顺序升序存储 |
TreeSet<E>(Collection<? extends E> c) | 构建一个TreeSet并使用c中的元素进行初始化 |
TreeSet<E>(Comparator<? super E> comparator) | 指定比较器并构建TreeSet |
TreeSet<E>(SortedSet s) | 构建包含给定SortedSet元素的 TreeSet |
Queue
PriorityQueue
PriorityQueue类使用队列存储元素,继承自AbstractQueue类。PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。
详细说明
ArrayDeque
ArrayDeque类继承自AbstractCollection类并实现Deque接口,支持两端元素的插入和删除。ArrayDeque中不允许有空元素且不是线程安全的,其操作效率高于LinkedList和Stack。
Map
Map按照键值对存储元素,键必须唯一而值可以不唯一。
其中,HashMap是Map的实现,但不维护任何顺序;LinkedHashMap是Map的实现,继承自HashMap类且维护插入顺序;TreeMap是Map和SortedMap的实现,它保持升序。
Map无法遍历,因此需要使用keySet()或entrySet()方法将其转换为 Set。
HashMap
HashMap是一个散列表,键唯一且不维护插入顺序,最多允许一条记录的键为 null,不支持线程同步。
1.构造函数
Constructor | Description |
---|---|
HashMap<E>() | 构建默认的HashMap |
HashMap<E>(int capacity) | 构建指定初始化容量的HashMap |
HashMap<E>(int capacity, float loadFactor) | 指定初始化容量、负载因子并构建HashMap |
HashMap<E>(Map<? extends K,? extends V> m) | 使用给定Map 对象m的元素来初始化HashMap |
2.常用方法
https://www.runoob.com/java/java-hashmap.html
最后
以上就是可靠电灯胆为你收集整理的【Java】集合的基础知识Java 集合的全部内容,希望文章能够帮你解决【Java】集合的基础知识Java 集合所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复