Java从入门到精通19==》List接口、Set接口、HashSet集合

Java从入门到精通19==》List接口、Set接口、HashSet集合

2023.8.10

一、List接口

1、什么是List接口

有序集合,这里的有序指的是存取顺序,用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素,与Set集合不同,列表通常允许重复的元素
总结:
有序、索引、重复

2、如何使用List接口

由于是接口,没有构造方法,因此想要得到实例则通过
这里使用多态手法
代码展示:

  List list= new ArrayList();

3、了解数据结构

1.栈结构

先进后出
想象成弹夹,先加载后弹出

2.队列结构

先进先出
想象成排队,先排的人先走

3.数组结构

​查询快、增删慢
原因:
查询快:
通过索引,可以快速访问指定位置的元素
增删元素慢:
指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。
指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中。

4.链表结构

查询慢、增删快
查找元素慢:
想查找某个元素,需要通过连接的节点,依次向后查找指定元素
增删元素快:
它不需要移动其他元素的位置。链表中每个节点都包含一个指向下一个节点的引用,通过修改节点的引用指向,可以快速地在链表中添加或删除元素

4、ArrayList集合

其底层是数组,所以查询快、增删慢

集合常用方法

若用Arraylist创建一个名为list的数组,则

  • list.add(元素)
    向数组尾部添加一个元素
  • list.size()
    获取集合长度
  • list.get(索引)
    获取数组索引位置数据
  • list.add(索引,元素)
    向索引位置插入一个元素,若索引为1,则执行完后索引1位置为新值,其他的往后移
  • list.set(索引,元素)
    将索引位置的旧元素换为新元素
  • list.clear()
    移除所以元素
  • list.isEmpty()
    判断数组是否含有元素,若无,则返回true若有,则返回false
  • list.contians(元素)
    判断数组中是否含有此元素,若有返回true,若没有返回false
  • list.remove(索引)
    移除索引处元素,并将其返回
  • list.remove(元素)
    移除集合中第一次出现的这个元素

5、LinkedList集合

其底层是链表所以查询慢、增删快

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

二、Set接口

1、什么是Set接口

Set接口是Collection的子接口,set接口没有提供额外的方法。Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法
特点
它里面的集合,所存储的元素就是不重复的且存取无序,没有索引所以不能使用普通for循环遍历

2、Set的使用

由于是接口,所以用多态方式实例化对象
特点:
无序
示例:
在这里插入图片描述
不重复(如果Set中已经存在相同的元素,则添加操作无效。)
示例:
在这里插入图片描述

方法:

  • add(E e)
    向Set中添加一个元素。

  • remove(Object o)
    从Set中移除指定的元素。

  • contains(Object o)
    判断Set中是否包含指定的元素。

  • size()
    返回Set中元素的数量。

  • isEmpty()
    判断Set是否为空。

  • clear()
    清除Set中的所有元素。

  • iterator()
    返回Set的迭代器,可以用于遍历Set中的所有元素。

需要注意的是,Set接口中的元素是无序的,因此不能使用下标访问元素

三、HashSet集合

1、什么是HashSet集合

HashSet集合是Java中的一种集合类,它是基于哈希表实现的无序集合,不允许存储重复的元素。HashSet允许添加、删除和查找元素,并具有常数级别的性能。HashSet实现了Set接口,因此它继承了Set的所有特性。与其他集合类相比,HashSet具有较高的性能和较低的空间复杂度。它是线程不安全的,不能在多线程环境下使用。

2、API中的HashSet集合

查阅HashSet集合的API介绍:此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。HashSet集合不能保证的迭代顺序与元素存储顺序相同。

3、特点

  • 底层数据结构是哈希表
  • 存取无序
  • 不可以存储重复元素
  • 没有索引,不能使用普通for循环遍历

4、哈希值

1.什么是哈希值

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

2.如何获取哈希值

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

3.哈希值的特点
  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写

5、构造方法

HashSet集合的构造方法有以下几种:

  1. HashSet()
    创建一个空的HashSet集合对象,初始容量为16,负载因子为0.75。

  2. HashSet(Collection<? extends E> c)
    创建一个包含指定集合元素的HashSet集合对象,其中元素按照它们由集合的迭代器返回的顺序添加到此集合中。

  3. HashSet(int initialCapacity)
    创建一个空的HashSet集合对象,指定其初始容量。

  4. HashSet(int initialCapacity, float loadFactor)
    创建一个空的HashSet集合对象,指定其初始容量和负载因子。

其中,initialCapacity是初始容量,loadFactor是负载因子,用于控制HashSet集合的填充因子。当元素数量超过容量×负载因子时,HashSet集合会进行扩容,容量扩大为当前容量的2倍。

6、HashSet集合常用方法

  • add(Object o): 添加元素,如果添加成功返回true,否则返回false。

  • clear(): 清空集合中的所有元素。

  • contains(Object o): 判断集合中是否包含指定元素,如果包含返回true,否则返回false。

  • isEmpty(): 判断集合是否为空,如果为空返回true,否则返回false。

  • iterator(): 返回一个迭代器,用于遍历集合中的元素。

  • remove(Object o): 删除集合中的指定元素,如果删除成功返回true,否则返回false。

  • size(): 返回集合中元素的个数。

  • toArray(): 将集合中的元素转换为数组,并返回该数组。

注意事项:

  • HashSet集合中的元素是无序的。

  • HashSet集合中的元素不允许重复。

  • HashSet集合中的元素必须重写equals方法和hashCode方法,以确保集合中的元素唯一性。

  • HashSet集合的底层实现是哈希表,因此添加、删除、查找元素的效率较高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头像真的只是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值