Java学习路线(13)——Collection集合类:List集合与Set集合

一、集合类体系结构
在这里插入图片描述


二、部分Collection类型对象
在这里插入图片描述
Collection集合特点

  • List系列集合是有序、可重复、有索引。

    • ArrayList:有序、可重复、有索引
    • LinkedList:有序、可重复、有索引
  • Set系列集合是无序、不重复、无索引。

    • HashSet:无序、不重复、无索引
    • LinkedHashSet:有序、不重复、无索引
    • TreeSet:按照大小默认升序、不重复、无索引

约束存储数据

  • 泛型约束: 集合是支持任意类型进行存储的。
  • 引用类型约束: 集合不支持基本类型,但支持引用数据类型。

三、Collection常用API

方法 说明
boolean add(E e) 添加指定数据并返回添加结果
void clear() 清空数据
boolean isEmpty() 判断数据为空
int size() 获取集合大小
boolean contains(Object o) 判断集合是否包含某个元素
boolean remove(E e) 删除集合中某个元素默认删除第一个
Object[] toArray() 集合转对象数组

拓展API

方法 说明
Collection addAll(Collection c) 合并

四、Collection遍历方式

1、迭代器(Iterator)

获取迭代器

方法 说明
Iterator iterator() 返回迭代器对象,默认指向0索引

Iterator中常用方法

方法 说明
boolean hasNext() 询问当前位置是否有元素
E next() 获取当前元素,并向下移动,注意越界(NoSuchElementException)

示例

/*1、创建集合对象*/
Collection<String> collection = new ArrayList<>();
collection.add("我");
collection.add("爱");
collection.add("中");
collection.add("国");
collection.add("!");

/*2、获取迭代器*/
Iterator<String> integer = collection.iterator();

/*循环遍历迭代器*/
while(integer.hasNext()){
   	//判断有没有值
	System.out.print(integer.next());	//获取值并下移
}

/*打印结果*/
我爱中国!

2、foreach
foreach实际上是重写了迭代器进行遍历。

格式:

for(数据类型 element : 数组/集合){
	循环体
}

示例

/*1、创建集合对象*/
Collection<String> collection = new ArrayList<>();
collection.add("我");
collection.add("爱");
collection.add("中");
collection.add("国");
collection.add("!");

/*2、foreach遍历*/
for (String str : collection) {
   
	System.out.print(str);
}

/*打印结果*/
我爱中国!

3、lambda
Collection类提供了一个叫做 forEach() 的方法进行遍历,该方法采用的是匿名类进行重写。

 /*1、创建集合对象*/
Collection<String> collection = new ArrayList<>();
collection.add("我");
collection.add("爱");
collection.add("中");
collection.add("国");
collection.add("!");

/*2、forEach()遍历*/
//System.out::print 是将当前元素进行引用打印
collection.forEach(System.out::print);

/*打印结果*/
我爱中国!

五、常见数据结构

概念: 数据结构是计算机底层存储、组织数据的方式,合适的数据结构能提高运行效率和存储效率。

常见结构
1、栈
特点: 后进先出,先进后出。

2、队列
特点: 先进先出,后进后出
三种队列: 单进单出队列,双进单出队列,双进双出队列

3、数组
存储特点: 一块内存连续的空间。
操作特点:

  • 查询速度快: 通过地址值和索引定位。
  • 删除速率低: 需要移动大量元素。
  • 添加速率低: 需要移动大量元素。

4、链表
存储特点: 内存中不连续,每个节点包含数据和下一个元素地址。
操作特点:

  • 查询速度慢: 因为内存不连续,所以需要遍历每一个元素。
  • 删除速率高: 通过指针指向更变即可完成删除。
  • 添加相对速率高: 因为查询慢,所以速率较低,高效添加是通过指针指向更变即可完成删除。
    两种链表: 单向链表(数据+下一地址),双向链表(上一地址+数据+下一地址)

5、二叉树
存储特点: 内存不连续,每个节点包含父节点地址,左右节点地址,数据值。
结构特点:

  • 只能有一个根节点,每个节点最多支持2个直接子节点。
  • 节点的度: 节点拥有的子树个数,二叉树的度不大于2。
  • 叶子结点: 度为0的节点,也称为终端节点
  • 高度: 叶子结点高度为1,叶子结点的父节点高度为2,…,根节点高度最高。
  • 层: 根节点在第1层,以此类推。
  • 兄弟节点: 拥有共同父节点的节点互称兄弟节点。

特殊的二叉树: 二叉排序树。

6、平衡二叉树
原则: 任意节点的左右两个子树高度差不超过1,任意节点的左右两个子树都是平衡二叉树。

7、红黑树
概念: 一种自平衡的二叉排序树,1972年被称为平衡二叉B树,1978年更名为**“红黑树”**。
特点: 每一个节点可以是红或者黑,通过 “红黑规则” 进行平衡。
红黑规则

  • 每个节点是红色或黑色,根节点必须是黑色。
  • 如果节点没有子节点或父节点,则节点对应指针属性为Nil,这些Nil视为叶节点,叶节点是黑色。
  • 如果一个节点是红色,则子节点必须是黑色。
  • 每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

六、List集合
特有方法:

方法 说明
void add(int index,E element 指定位置插入元素
E remove(int index 指定位置的元素,并返回删除元素
E set(int index,E element 修改指定位置的元素,并返回修改元素
E get(int index 获取指定位置的元素

List实现类的底层原理

1、ArrayList底层原理:

  • 底层基于数组实现,根据索引定位元素,增删需要做大量元素的移位操作。
  • 第一次创建集合并添加元素时,默认创建长度为10的数组。
  • 当数组满元素时,自动扩容二分之一。

2、LinkedList底层原理

  • 基于双链表实现,查询速度慢,增删首尾元素快(最适合实现栈与队列结构)。
  • 独有方法
方法 说明
void addFirst(E e) 首位插入指定元素
void addLast(E e) 末位插入指定元素
E getFirst() 获取首位元素
E getLast() 获取末位元素
E removeFirst() 删除首位元素
E removeLast() 删除末位元素
E push() 压栈/入栈
E pop() 弹栈/出栈
E offerLast() 入队
E o
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zain_horse

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

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

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

打赏作者

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

抵扣说明:

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

余额充值