【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
    评论
Java集合Java编程中非常重要的一部分,它提供了一种方便的方式来处理一组对象。Java集合框架包括List、Set、Map等接口和实现它们的类。下面是Java集合基础知识的介绍: 1. List接口:List是一个有序的集合,它可以包含重复的元素。List接口的常用实现类有ArrayList和LinkedList。其中,ArrayList是一个动态数组,它可以自动扩容以容纳更多的元素;而LinkedList是一个双向链表,它可以快速地在列表中插入或删除元素。 2. Set接口:Set是一个不允许重复元素的集合。Set接口的常用实现类有HashSet和TreeSet。其中,HashSet是一个基于哈希表的实现,它可以快速地查找元素;而TreeSet是一个基于红黑树的实现,它可以对元素进行排序。 3. Map接口:Map是一个键值对的集合,它允许使用键来查找值。Map接口的常用实现类有HashMap和TreeMap。其中,HashMap是一个基于哈希表的实现,它可以快速地查找键值对;而TreeMap是一个基于红黑树的实现,它可以对键进行排序。 下面是一个示例代码,演示了如何使用ArrayList集合存储学生的成绩,并遍历这个集合: ```java // 创建一个ArrayList集合,向这个集合中存入学生的成绩 ArrayList<Integer> al = new ArrayList<Integer>(); al.add(78); al.add(67); // 对集合遍历 // 方式1 for (Object obj : al) { System.out.println(obj);} // 方式2 for (Integer i : al) { System.out.println(i); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值