xiaobenchi

导航

Collection API的使用

Collection API的使用

集合类库的整体框架

Java中集合框架顶层框架是:Java.util.Collection集合和Java.util.Map集合

java集合框架

Collection集合

​ java.util.Collection接口是List接口,Queue接口以及Set接口的父接口,因此该接口里定义的方法即可用于操作List集合,也可用于操作Queue集合和Set集合

方法声明 功能
boolean add(E e) 向集合中添加对象
boolean addAll(Collection<? extends E> c) 用于将参数指定集合中的所有元素添加到当前集合中
boolean contains(Object o) 判断是否包含指定对象
boolean containsAll(Collection<?> c) 判断是否包含参数指定的所有对象
boolean retainAll(Collection<?> c) 保留当前集合中存在且参数集合中存在的所有对象
boolean remove(Object o) 从集合中删除对象
boolean removeAll(Collection<?> c) 从集合中删除参数指定的所有对象
void clear() 清空集合
int size() 返回包含对象的个数
boolean isEmpty() 判断是否为空
Object[] toArray() 将集合转换为数组
iterator iterator() 获取当前集合的迭代器

Iterator接口

java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素

java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象

方法声明 功能
boolean hasNext() 判断集合中是否有可以迭代访问的元素
E next() 用于取出一个元素并指向下一个元素
void remove 用于删除访问到的最后一个元素

List集合

java.util.List集合是Collection集合的子集合,该集合允许拥有重复元素并且有先后放入次序。而Collection集合没有先后之分,可放入重复元素

该集合的主要实现类有:ArrayList类,LinkedList类,Stack类,Vector类。

其中ArrayList类的低层是采用动态数组进行数据管理的,支持下标访问,元素增删不方便

其中LinkedList类的低层是采用双向链表进行数据管理的,访问不方便,增删元素方便

可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别

常用方法

方法声明 功能
void add(int index,E element) 向集合中指定位置添加元素
boolean addAll(int index,Collection<? extends E> c) 向集合中添加所有元素
E get(index) 从集合中获取指定位置元素
int indexOf(Object o) 查找参数指定对象
int lastIndexOf(Object 0) 反向查找参数指定的对象
E set(int index, E element) 修改指定位置元素
E remove(int index) 删除指定位置元素
List SubList(int fromIndex,int toIndex) 获取子List

Stack类

Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈

方法声明 功能
isEmpty() 判断栈是否为空
push(E e) 将元素入栈
pop() 将元素出栈
peer 返回栈顶元素

Queue

java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系

该集合主要用于描述具有先进先出特征的数据结构,叫做队列

该集合的主要实现类是LinkedList类,因为该类在增啥方面比较有优势

方法声明 功能
boolean offer(E e) 将一个对象添加至队尾,若添加成功则返回True
E poll() 从队首删除并返回一个元素
E peek() 返回队首的元素(并不删除)

Deque

定义:双向队列,支持插入删除元素的线性集合

java官方文档推荐用deque实现栈(stack)

和Queue的区别

Deque是double ended queue,将其理解为双端结束的队列,双端对列,可以在首尾插入或删除元素

特点

  • 插入、删除、获取操作支持两种形式:快速失败和返回null或true/false
  • 既具有FIFO特点又具有LIFO特点,既是队列又是栈
  • 不推荐插入null元素,null作为特定返回值表示队列为空
  • 未定义基于元素相等的equals和hashCode

实现

ArrayDeque : 基于数组实现的线性双向队列,通常作为栈或队列使用,但是栈的效率不如LikedList高。

LinkedList:基于链表实现的链式双向队列,通常作为栈或队列使用,但是队列的效率不如ArrayQueue高。

方法分析

方法名称 功能
addFirst() 向队头插入元素,如果元素为空,发生NPE(空指针异常)
addLast() 向队尾插入元素,如果为空则发生NPE
offerFirst() 向队头插入元素,插入成功返回true,失败返回false
offerLast() 向队尾插入元素,插入成功返回true,失败返回false
removeLast() 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException
removeFirst() 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException
pollFirst() 返回并移除队头元素,如果队列无元素,则返回null
pollLast() 返回并移除队尾元素,如果队列无元素,则返回null
getFirst() 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException
getLast() 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException
peekFirst() 获取队头元素但不移除,如果队列无元素,则返回null
peekLast() 获取队尾元素但不移除,如果队列无元素,则返回null
pop() 弹出栈元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
push() 向栈中压入元素,也就是向队头增加元素,等价于addFirst(), 如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException

Set集合

Set继承于Collection接口,是一个不允许出现重复元素,且无序的集合,主要有HashSet和TreeSet两大实现类。在判断重复元素的时候,Set集合会调用hashCode(),和equals()方法来实现

区别:

  • HashSet是哈希表结构,主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置。
  • TreeSet是红黑树结构,每一个元素都是树中的一个节点,插入的元素都会进行排序。

set常用方法

方法 功能
boolean add() 添加元素
boolean addAll() 添加多个元素
boolean remove() 移除元素
boolean removeAll() 移除多个元素
void clear() 清空集合
int size() 求集合长度
boolean isEmpty() 判断是否为空
boolean contains() 判断是否包含
boolean containsAll() 判断是否包含全部
boolean retainAll() 判断是否包含全部
Iterator<> iterator() 获取集合迭代器
toArray() 集合转换为数组
boolean equals() 判断是否相等
int hashCode(0) 求hash值

HashSet

特点:

  • 不允许出现重复元素
  • 允许插入null值
  • 元素无序(添加顺序和遍历顺序不一样)
  • 线程不安全,若两个线程同时操作HashSet,必须通过代码实现同步

基本操作

方法 功能
add() 添加元素
remove() 移除元素
clear() 清空集合
isEmpty() 是否为空
isContains 是否包含指定元素
iterator() 迭代器

TreeSet

特点:

  • 对插入的元素进行排序,是一个有序的集合
  • 底层使用红黑树结构
  • 允许插入null值
  • 不允许插入重复元素
  • 线程不安全

基本操作

方法 功能
add() 添加元素
iterator() 升序迭代器
descendingIterator() 降序迭代器
first() 获取头节点
headSet() 获取指定元素之前的元素集合,不包含指定元素
subSet() 获取给定元素之间的集合,包含头不包含尾
isEmpty() 判断是否为空
isContain() 判断是否包含指定元素
remove() 移除指定元素
pollFirst() 删除并返回第一个元素
pollLast() 删除并返回最后一个元素
clear() 清空集合

posted on 2022-04-13 15:48  小迟在努力  阅读(77)  评论(0)    收藏  举报