Java基础-8(数据结构、List接口、Set接口、Collections)

Java基础-8(数据结构、List接口、Set接口、Collections)

1.常见的数据结构

1.1 栈
栈的特点:

  • 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)

  • 栈的入口、出口的都是栈的顶端位置。

1.2 队列
队列的特点:

  • 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)
  • 队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口

1.3 数组
数组的特点:

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

1.4 链表
链表的特点:

  • 多个结点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。

  • 查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素

  • 增删元素快:

    • 增加元素:只需要修改连接下个元素的地址即可。
    • 删除元素:只需要修改连接下个元素的地址即可。

1.5 红黑树
红黑树本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。也就意味着,树的键值仍然是有序的。

红黑树的约束:

  1. 节点可以是红色的或者黑色的
  2. 根节点是黑色的
  3. 叶子节点(特指空节点)是黑色的
  4. 每个红色节点的子节点都是黑色的
  5. 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同

红黑树的特点:
​ 速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多于二倍

2.List集合

java.util.List接口继承自Collection接口

List接口特点:

  1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
  2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
  3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

List接口中常用方法;

List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法,如下:

  • public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

3.List 接口的实现类

3.1 ArrayList集合
java.util.ArrayList集合数据存储的结构是数组结构。
元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。
许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

3.2 LinkedList集合

java.util.LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。

实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。这些方法我们作为了解即可:

  • public void addFirst(E e):将指定元素插入此列表的开头。
  • public void addLast(E e):将指定元素添加到此列表的结尾。
  • public E getFirst():返回此列表的第一个元素。
  • public E getLast():返回此列表的最后一个元素。
  • public E removeFirst():移除并返回此列表的第一个元素。
  • public E removeLast():移除并返回此列表的最后一个元素。
  • public E pop():从此列表所表示的堆栈处弹出一个元素。
  • public void push(E e):将元素推入此列表所表示的堆栈。
  • public boolean isEmpty():如果列表不包含元素,则返回true。

3.3 Vector集合

单线程数组(单线程ArrayList),1.1版本

4.Set接口及其实现类

4.1 Set接口
java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。
List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出现重复。

tips:Set集合取出元素的方式可以采用:迭代器、增强for。

4.2 HashSet类
java.util.HashSetSet接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。
java.util.HashSet底层的实现其实是一个java.util.HashMap支持
在这里插入图片描述
HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能。保证元素唯一性的方式依赖于:hashCodeequals方法。

4.2.1 hashCode:
在这里插入图片描述
4.2.2 HashSet集合存储数据的结构
在这里插入图片描述
JDK1.8引入红黑树大程度优化了HashMap的性能,那么对于我们来讲保证HashSet集合元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。

4.2.3 set集合存储元素不重合的原理
在这里插入图片描述
set集合在调用add方法的时候,add方法会调用元素的hashCode方法和equals方法,判断元素是否重复。

4.2.4 LinkedHashSet集合
在这里插入图片描述

4.3 可变参数
在这里插入图片描述
即:参数类型确定,参数个数可变
在这里插入图片描述

5. Collections

5.1 Collections集合工具类的方法

添加元素和打乱顺序方法:
在这里插入图片描述
在这里插入图片描述
排序方法:
在这里插入图片描述
在这里插入图片描述
实现Comparable接口并重写compareTo方法
在这里插入图片描述
在这里插入图片描述

另一种排序方法;
在这里插入图片描述
在这里插入图片描述
双重条件排序:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值