【Java】集合的基础知识

Java 集合

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

Collection

java-collection
其中,List接口存储一组不唯一、有序插入的对象,能够通过索引访问元素;Queue接口保证先进先出,可以被定义为有序列表;Set接口对collection进行扩展,存储一组唯一、无序的对象。

Set vs List

  1. Set元素唯一、无序;List元素不唯一、有序

  2. Set检索效率低,增删效率高且不会引起元素位置改变;List检索效率高,增删效率低且引起元素位置改变

Collection为什么不直接实现 Iterator 接口?
https://blog.csdn.net/qq_42776429/article/details/82470380

List

ArrayList

ArrayList类继承自 AbstractList 类并实现 List接口,使用动态数组来存储元素,与C++中的Vector类似。它是non synchronized(非同步的),操作效率略慢于LinkedList。

1.构造函数

ConstructorDescription
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),增删引起元素位置移动,更适合存储和访问数据

补充:

arraylistVSvector

LinkedList

LinkedList 类使用双向链表来存储元素。它提供了一个链表数据结构。它继承了 AbstractList 类并实现了 List 和 Deque 接口。
LinkedList

1.构造函数

ConstructorDescription
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.构造函数

ConstructorDescription
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接口)。

ConstructorDescription
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按照键值对存储元素,键必须唯一而值可以不唯一。

map
其中,HashMap是Map的实现,但不维护任何顺序;LinkedHashMap是Map的实现,继承自HashMap类且维护插入顺序;TreeMap是Map和SortedMap的实现,它保持升序。

Map无法遍历,因此需要使用keySet()或entrySet()方法将其转换为 Set。

HashMap

HashMap是一个散列表,键唯一且不维护插入顺序,最多允许一条记录的键为 null,不支持线程同步。

1.构造函数

ConstructorDescription
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值