Java集合整理


title: Java集合
date: 2020-09-05 09:18:44
tags:


引言

集合概述

  • java集合框架图

    在这里插入图片描述

Collection

在这里插入图片描述
集合中存储的都是对象的引用(地址)。

  • 集合的输出
    • 四种输出方式
      • Iterator
      • ListIterator
      • Enumeration
      • foreach
    • 注意:
      • 在迭代时,不可以通过集合对象的方法操作集合中的元素,因为会发生ConcurrentModificationException异常。所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作,如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的listIterator方法获取。

List接口

(对付顺序的好帮手): 存储的元素是有序的、可重复的。
在这里插入图片描述

ArrayList类

  • Object[] 数组
  • 查询快
  • add(E e) O(1)
  • add(int index, E element) O(n-i)

LinkedList类

  • 双向链表实现
  • 查询慢
  • add(E e) O(1)
  • add(int index, E element) o(n)

Vector类

  • 线程安全的,效率低
Stack类
  1. boolean empty()
    判断栈是否为空
  2. E peek()
    返回栈顶对象,不移除
  3. E pop()
    返回栈顶对象,并移除
  4. E push(E item)
    压入栈顶
  5. int search(Object o)
    返回对象在栈的位置

Queue接口

Queue接口定义了如下6个方法,我们常用的LinkedList类就实现了Queue接口。

  1. boolean add(E e)
    向队列中添加元素
  2. E element()
    返回队列的头,且不移除
  3. boolean offer(E e)
    向队列中添加元素
  4. E peek()
    返回队列的头,且不移除
  5. E poll()
    返回队列的头,且移除
  6. E remove()
    返回队列的头,且移除
    add、element、remove会在操作失败时抛出异常,而offer、peek、poll在操作失败时返回特殊值。

PriorityQueue类

Dequeue接口

ArrayDeque类

Set接口

HashSet类

  • HashSet是如何保证元素唯一性的呢?

    是通过元素的两个方法,hashCode和equals来完成。
    如果元素的HashCode值相同,才会判断equals是否为true。
    如果元素的hashcode值不同,不会调用equals。

LinkedHashSet类

  • 能够按照添加的顺序遍历

SortedSet接口

TreeSet类
  • 底层为红黑树
  • 能够按照添加元素的顺序进行遍历,排序的方式有自然排序和定制排序。

Map接口

<Key,Value>
在这里插入图片描述

HashTable 类

  • 线程安全 其内部方法基本经过synchronized修饰 (替代 ConcurrentHashMap)
  • 效率较低,基本被淘汰

HashMap 类

  • 底层数据结构: 数组 + 链表(jdk1.8后 链表长于(8)将链表转为红黑树)
  • 初始容量大小和每次扩充容量大小:
    • HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。
    • 创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小(HashMap 中的tableSizeFor()方法保证,下面给出了源代码)。也就是说 HashMap 总是使用 2 的幂作为哈希表的大小。

LinkedHashMap 类

  • 在上HashMap结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序

SortedMap 接口

TreeMap类

  • 底层数据结构:红黑树

其他(草稿)

  • List接口

    • ArrayList
      • Object[] 数组
      • 查询快
      • add(E e) O(1)
      • add(int index, E element) O(n-i)
    • LinkedList
      • 双向链表实现
      • 查询慢
      • add(E e) O(1)
      • add(int index, E element) o(n)
  • Map接口

    • HashMap
      • 数组 + 链表(jdk1.8后 链表长于(8)将链表转为红黑树)
    • LinkedHashMap
      • 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序
    • TreeMap
    • LinkedTable
    • ConcurrentHashMap
      • 只锁桶
  • Set

    • HashSet
      • 线程不安全 底层是HashMap 可以存储null值
    • LinkedHashSet
    • TreeSet
  • Collection接口

Modifier and Typ方法描述
booleanadd(E e)确保此集合包含指定的元素(可选操作)。
booleanaddAll​(Collection<? extends E> c)将指定集合中的所有元素添加到此集合(可选操作)。
voidclear​()从此集合中删除所有元素(可选操作)。
booleancontains​(Object o)如果此集合包含指定的元素,则返回 true 。
booleancontainsAll​(Collection<?> c)如果此集合包含指定集合中的所有元素,则返回 true 。
booleanequals​(Object o)将指定的对象与此集合进行比较以获得相等性。
inthashCode​()返回此集合的哈希码值。
booleanisEmpty​()如果此集合不包含元素,则返回 true 。
Iteratoriterator​()返回此集合中元素的迭代器。
default StreamparallelStream​()返回可能并行的 Stream与此集合作为其来源。
booleanremove​(Object o)从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
booleanremoveAll​(Collection<?> c)删除指定集合中包含的所有此集合的元素(可选操作)。
defaultboolean removeIf​(Predicate<? super E> filter)删除满足给定谓词的此集合的所有元素。
booleanretainAll​(Collection<?> c)仅保留此集合中包含在指定集合中的元素(可选操作)。
intsize​()返回此集合中的元素数。
defaultSpliterator spliterator​()在此集合中的元素上创建一个Spliterator 。
defaultStream stream​()返回一个序列 Stream与此集合作为其来源。
Object[]toArray​()返回一个包含此集合中所有元素的数组。
T[]toArray​(T[] a)返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值