Java单列集合概述

Java集合体系

Collection集合

Collection是单列集合的顶层实现,是一个接口,提供了如下方法

方法名 说明
boolean add(E e) 添加元素
boolean remove(Object o) 从集合中移除指定的元素
void clear() 清空集合中的元素
boolean contains(Object o) 判断集合中是否存在指定的元素
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中元素的个数

集合的遍历方法

  1. 通过迭代器进行遍历,集合调用iterator方法得到一个Iteratora对象,iterator中提供了如下方法
  2. 通过增强for循环

for(元素数据类型 变量名 : 数组/集合对象名) {
循环体; }

方法名 说明
boolean hasNext() 判断集合中是否存在下一元素
element next() 得到集合的元素
List集合

list仍然是一个接口,提供了更细化的接口

List集合特点

  • 有索引
  • 可以存储重复元素
  • 存取顺序有序
    List集合的特有方法
方法名 描述
void add(int index,E element) 在此集合中的指定位置插入指定的元素
E remove(int index) 删除指定索引处的元素,返回被删除的元素
E set(int index,E element) 修改指定索引处的元素,返回被修改的元素
E get(int index) 返回指定索引处的元素

ListIterator介绍

  • 通过List集合的listIterator()方法得到,所以说它是List集合特有的迭代器
  • 用于允许程序员沿任一方向遍历的列表迭代器,在迭代期间修改列表,并获取列表中迭代器的当前位置

并发修改异常

  • 出现的原因

    ​ 迭代器遍历的过程中,通过集合对象修改了集合中的元素,造成了迭代器获取元素中判断预期修改值和实际修改值不一致,则会出现:ConcurrentModificationException

  • 解决的方案

    ​ 用for循环遍历,然后用集合对象做对应的操作即可


List集合的具体实现

  1. ArrayList
  2. LinkedList

特点:
ArrayList:

  • 底层采用数组实现
  • 查询快
  • 增加和删除慢

LinkedList:

  • 底层采用链表实现
  • 查询较慢
  • 增删快
LinkedList

概述:和ArrayList集合一样,是List的具体实现

特有方法

方法名 说明
public void addFirst(E e) 在该列表开头插入指定的元素
public void addLast(E e) 将指定的元素追加到此列表的末尾
public E getFirst() 返回此列表中的第一个元素
public E getLast() 返回此列表中的最后一个元素
public E removeFirst() 从此列表中删除并返回第一个元素
public E removeLast() 从此列表中删除并返回最后一个元素

Set集合

set集合是一个接口

set集合特点:

  • 元素存取无序
  • 没有索引,只能通过迭代器和增强for遍历
  • 不能存储重复元素
哈希值
  • 哈希值简介

    是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

  • 如何获取哈希值

    ​ Object类中的public int hashCode():返回对象的哈希码值

  • 哈希值的特点

    • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
    • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
HashSet

HashSet集合的特点

  • 底层数据结构是哈希表
  • 对集合的迭代顺序不做保证,也就是说取出元素顺序和存储集合时可能不一致
  • 没有带索引的方法,故只能通过迭代器或者增强for循环进行遍历
  • 由于实现了Set接口,故集合不可以存储重复元素
HashSet集合保证元素唯一性的原理

​ 1.根据对象的哈希值计算存储位置

  • 如果当前位置没有元素则直接存入
  • 如果当前位置有元素存在,则进入第二步

​ 2.当前元素的元素和已经存在的元素比较哈希值

  • 如果哈希值不同,则将当前元素进行存储
  • 如果哈希值相同,则进入第三步

​ 3.通过equals()方法比较两个元素的内容

  • 如果内容不相同,则将当前元素进行存储

  • 如果内容相同,则不存储当前元素

    图解:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,有多种单列集合可供使用。其中一些常见的单列集合包括: - ArrayList:ArrayList是基于数组实现的动态数组,可以根据需要自动扩展容量。它允许存储重复元素,并且可以按索引访问元素。 - LinkedList:LinkedList是基于链表实现的集合,它可以高效地进行插入和删除操作。与ArrayList相比,LinkedList在随机访问方面性能较差,但在插入和删除操作方面更加高效。 - HashSet:HashSet是基于哈希表实现的集合,它不允许存储重复元素,并且不保证元素的顺序。HashSet提供了常数时间的插入、删除和查找操作。 - TreeSet:TreeSet是基于红黑树实现的有序集合,它按照元素的自然顺序进行排序,或者根据提供的Comparator进行排序。TreeSet不允许存储重复元素。 - LinkedHashSet:LinkedHashSet是基于哈希表和链表实现的有序集合,它按照元素插入的顺序进行排序。LinkedHashSet允许存储重复元素。 - PriorityQueue:PriorityQueue是基于优先级堆实现的队列,它根据元素的优先级进行排序。PriorityQueue允许存储重复元素,并且提供了常数时间的插入和删除最小元素的操作。 以上是一些常见的单列集合,每种集合都有其特定的用途和适用场景。具体选择哪种集合取决于你的需求和性能要求。 #### 引用[.reference_title] - *1* *2* *3* [Java中Collection单列集合](https://blog.csdn.net/m0_60489526/article/details/119830185)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值