集合

集合

介绍

  • java中的容器,用来存储对象
  • 存储基本数据类型时会自动装箱为对象
  • 分为两大核心接口,CollectionMap

集合与数组

集合 数组
存储元素 对象 基本数据类型,对象
容量 自动扩容 固定
存储方式 有的集合是连续存储,如列表.有的集合不是,如链表 元素是连续存储的

Collection

介绍

  • java.util
  • 定义了集合的基本操作,如添加,删除,遍历等
  • 继承了Iterable接口,实现了forEach或迭代器遍历

方法

添加

方法 描述
boolean add(E e) 向集合中添加一个元素
boolean addAll(Collection<? extends E> c) 将指定集合的所有元素添加到集合中

删除

方法 描述
boolean remove(Object o) 删除集合中指定的元素
boolean removeAll(Collection<? extends E> c) 删除集合中与指定集合所有匹配的元素
void clear() 清空集合

查询

方法 描述
boolean contains(Object o) 判断集合中是否包含指定元素
boolean containsAll(Collection<? extends E> c) 判断指定集合是否是集合的子集
boolean isEmpty() 判断集合是否为空

遍历

方法 描述
Iterator<E> iterator() 返回集合的迭代器
void forEach(Consumer<? super E> action) 通过函数式接口遍历数据

其他

方法 描述
boolean retainsAll(Collection<?> c) 保留集合中与指定集合所有匹配的元素
Object[] toArray() 将集合转换为数组
<T> T toArray(T[] array) 将集合转换为指定类型的数组

List

介绍

  • Collection的子接口
  • 有序集合
  • 允许重复元素
  • 允许null
  • 支持索引操作
  • 常见实现类有ArrayList,Vector,LinkedList

方法

添加
方法 描述
void add(int index,E e) 在指定索引位置添加元素
boolean addAll(int index,Collection<? extends E> c) 在指定索引位置插入指定集合的所有元素
删除
方法 描述
E remove(int index) 删除指定索引的元素,并返回该元素
修改
方法 描述
E set(int index,E e) 修改指定索引的元素,并返回被替换的元素
查询
方法 描述
E get(int index) 获取指定索引的元素
int indexOf(Object o) 返回指定元素第一次出现的索引位置.不存在返回-1
int lastIndexOf(Object o) 返回指定元素最后一次出现的索引位置.不存在返回-1
List<E> subList(int formIndex,int toIndex) 返回列表[formIndex,toIndex)的子列表
遍历
方法 描述
ListIterator<E> listIterator() 返回一个列表迭代器,支持双向遍历和修改操作

实现类

ArrayList
  • 基于动态数组实现,支持快速随机访问
  • 查找和遍历性能高,适用于频繁查找和遍历的场景
  • 插入和删除元素较慢(需移动元素)
  • 线程不安全
LinkedList
  • 基于双向链表实现,支持快速插入和删除
  • 插入和删除性能高,适用于频繁插入和删除元素的场景
  • 查找和遍历性能较低
  • 线程不安全
  • 同时实现了DequeList接口,既可以作为队列使用,也可以作为列表使用
  • 还可以作为栈使用
Vector
  • 与ArrayList类似
  • 线程安全
  • 性能低
  • 已过时
Stack
  • 继承Vector,实现栈
性能比较
操作 ArrayList LinkedList Vector
随机访问 O(1) O(n) O(1)
插入和删除 O(n) O(1) O(n)
内存占用 较低 较高 较低
线程安全 不安全 不安全 安全

Set

介绍

  • Colleciotn的子接口
  • 无序集合
  • 不允许重复元素
  • 可以存储null,TreeSet除外
  • 继承了Collection的所有方法,但是本身没有实现方法
  • 常见实现类有HashSet,LinkedHashSet,TreeSet

实现类

HashSet<>
  • 基于哈希表,无序
  • 添加,删除,查询时间复杂度为`O(1)“
  • 适用于快速查找和去重的长江
LinkedHashSet
  • 基于哈希表和链表实现,有序
  • 内存占用较高
  • 适用于去重且有序的场景
TreeSet
  • 基于红黑树实现,元素根据自然顺序或自定义顺序排序
  • 添加,删除,查询时间复杂度为`O(log n)“
  • 支持范围查找
  • 适用于去重且需要排序的场景
性能比较
操作 HashSet LinkedHashSet TreeSet
添加/删除 O(1) O(1) O(log n)
查询 O(1) O(1) O(log n)
内存占用 较低 较高 较高
元素顺序 无序 插入顺序 自然顺序

Queue

介绍

  • Collection的子接口
  • 队列,先进先出
  • 不允许null
  • 支持双端操作(Deque)
  • 常见实现类有PriorityQueue,LinkedList

方法

添加
方法 描述
boolean add(E e) 将指定元素插入到队列,如果队列已满抛出IllegalStateException
boolean offer(E e) 将指定元素插入到队列,如果队列已满,返回false
删除
方法 描述
E remove() 移除并返回队列头部元素,如果队列为空,抛出NoSuchElementException
E poll() 移除并返回队列头部元素,如果队列为空,返回null
查询

|方法|描述| |E element()|返回队列的头部元素,如果队列为空,则抛出NoSuchElementException| |E peek()|返回队列的头部元素,如果队列为空,返回null|

实现类

PriorityQueue
  • 基于堆实现,元素按自然顺序或自定义顺序排序
  • 支持优先级排序,头部元素优先级最高
  • 适合按优先级处理元素的场景
ArrayDeque
  • 基于动态数组实现,可以作为普通或双端队列
  • 性能优于LinkedList,支持快速插入和删除
  • 适合高效操作队列的场景

Deque

介绍
  • Queue的子接口
  • 支持队列两端进行操作
方法
添加
方法 描述
void addFirst(E e) 在队列头部插入元素
void addLast(E e) 在队列尾部插入元素
boolean offerFirst(E e) 在队列头部插入元素,成功返回true
boolean offerLast(E e) 在队列尾部插入元素,成功返回true
删除
方法 描述
E removeFirst() 移除并返回队列头部元素
E removeLast() 移除并返回队列尾部元素
E pollFirst() 移除并返回队列头部元素,队列为空时返回null
E pollLast() 移除并返回队列头部元素,队列为空时返回null
查询
方法 描述
E getFirst() 返回队列头部元素
E getLast() 返回队列尾部元素
E peekFirst() 返回队列头部元素
E peekLast() 返回队列尾部元素

Map

介绍

  • 存储键值对(key-value)的集合
  • key不允许重复

方法

添加

方法 描述
V put(K key,V value) 将指定的键值插入到Map中,如果键已经存在,则用新值替换旧值,并返回旧值,如果键不存在,返回null
void putAll(Map<? extends K,? extends V> m) 将指定Map中的所有键值插入到当前Map

删除

方法 描述
V remove(Object key) 根据键删除对应键值对,并返回被删除的值,如果键不存在返回null
void clear() 清空Map

查询

方法 描述
V get(Object key) 根据键获取对应的值,如果键不存在返回null
V getOfDefault(Object key,V defaultValue) 根据键获取对应的值,如果见不存在返回默认值
boolean containsKey(Object key) 判断Map中是否包含指定键
boolean containsValue(Object Value) 判断Map中是否包含指定值
boolean isEmpty() 判断Map是否为空
int size() 返回Map中键值对的数量

修改

方法 描述
V replace(K key,V value) 替换指定键的值,如果键不存在返回null
boolean replace(K key,V oldValue,V newValue) 当指定键的值等于oldValue时,替换为newValue,否则返回false

遍历

方法 描述
Set<K> keySet() 返回Map中所有键的集合
Collection<V> values() 返回Map中所有值的集合
Set<Map.Entry<K,V> entrySet()> 返回Map中所有键值对的集合

Map.entry

介绍

  • Map的内部接口
  • Map中存储数据的基本单元,表示一个键值对
  • 每一个Map.entry对象都包含一个键值对
  • 有两个实现类HashMap.NodeTreeMap.Entry

方法

方法 描述
K getKey() 获取键
V getValue() 获取值
V setValue() 修改值,并返回旧值

实现类

HashMap

  • 基于哈希表实现,性能高
  • 键值对无序
  • 允许null键和null

LinkedHashMap

  • 基于hash表与链表实现
  • 键值对按插入顺序或访问顺序排序
  • 具有HashMap的性能优势

TreeMap

  • 基于红黑树实现
  • 键值对按自然顺序或自定义顺序排序
  • 支持范围查找

HashTable

  • HashMap类型
  • 不允许null键和null
  • 已过时

性能比较

操作 HashMap LinkedHashMap TreeMap HashTable
添加/删除 O(1) O(1) O(log n) O(1)
查找 O(1) O(1) O(log n) O(1)
内存占用 较低 较高 较高 较低
键值对顺序 无序 插入顺序 自然顺序 无序
线程安全 不安全 不安全 不安全 安全

迭代器

介绍

  • 用来遍历集合,单向遍历
  • 支持删除元素
  • 并发修改可能会产生异常

方法

方法 描述
boolean hashNext() 判断集合是否有下一个元素
E next() 返回集合中的下一个元素,如果没有元素抛出NoSuchElementException
void remove() 删除当前元素,每次调用next()后,只能调用一次remove()

ListIterator

介绍

  • Iterator的子接口
  • 增强迭代器,专用于遍历List
  • 支持双向遍历
  • 支持遍历过程中修改元素
  • 支持获取索引

方法

方法 描述
boolean hasPrevious() 判断是否有前一个元素
E previous() 返回前一个元素
int nextIndex() 返回下一个元素索引
int previousIndex() 返回前一个元素索引
void set(E e) 指定元素替换最后一次返回的元素
void add(E e) 在当前索引插入元素

工具类

Collections

介绍

  • java.util
  • 提供了对集合进行操作的方法

方法

方法 描述
void sort(List<T> list,[Comparator<? super T> c]) List进行排序,可以自定义排序规则
int binarySeach(List<T> list,T key,[Comparator<? extends T> c]) 对已排序集合二分查找,返回索引,不存在返回负数
boolean addAll(Collection<? super T> c,T... element) 添加一组元素到集合中
T max(Collection<? extends T> c) 返回集合中最大的元素
T min(Collection<? extends T> c) 返回集合中最小的元素
void reverse(List<?> list) 反转List集合
void shuffle(List<?> list) 随机打乱List集合中元素的顺序
void swap(List<?> list,int i,int j) 交换List集合两个位置的元素
void fill(List<? super T>) list,T obj 用指定元素填充List集合的所有元素
void copy(List<? super T> dest,List<? extends T> src) List集合的元素,复制到目标List集合
int frequency(Collection<?> c,Object o) 统计指定元素在集合中出现的次数
List<T> unmodifiableList(List<? extends T> list) 返回一个不可修改的List
List<T> emptyList() 返回一个空的不可修改的List
List<T> singletonList(T o) 返回一个只包含一个元素的不可修改的List
List<T> synchronizedList(List<T> list) 返回一个线程安全的List

Arrays

介绍

  • java.util
  • 提供了对数组进行操作的方法

方法

方法 描述
String toString(Object[] a) 将数组转换为字符串
void sort(T[] a,[Comparator<? extends T> c]) 对数组进行升序排序
int binarySearch(T[] a,[Comparator<? extends T> c]) 对已排序数组进行二分查找,没有找到指定元素返回-1
boolean equals(T[] a,T[] b) 比较两个数组是否相等
void fill(T[] a,T val) 填充指定元素到整个数组或某一范围
T[] copyOf(T[] original,int newLength) 复制整个数组,可以只能数组长度
T[] copyOfRange(T[] original,int form,int to) 复制区间内的数组元素
List<T> asList(T... a) 将数组转换为集合
String deepToString(Object[] o) 递归输出多维数组内容
boolean deepEquals(Object[] a1,Object[] o2) 递归比较多维数组
void setAll(T[] array,Function<? extends T> generator) 通过函数式接口,赋值整个数组

线程安全

方法

  • Collections工具类的synchronizedList方法,可以返回一个线程安全的集合对象

  • 通过线程安全集合来保证线程安全
  • Vector,HashTable是低效的线程安全实现类
  • CurrentHashMap是高效的线程安全Map实现
  • CopyOfWriteArrayList是高效的线程安全List实现,适用于读多写少的场景
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇