day17java集合

Day17 集合

  1. 集合
    1.1 概述
    Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.util包中。
    【问】:之前我们需要把多个元素放到一起的时候,使用的是数组。那么为何还要提供Java集合工具类呢?
    数组 集合
    长度固定 长度不固定
    存放任意类型 不能存放基本数据类型,只能存放对象的引用

我们通过对比数组和Java集合工具类来解释Java集合工具类的必要性。
数组 集合
长度固定 长度不固定
存放任意类型 不能存放基本数据类型,只能存放对象的引用

注意:如果集合中存放基本类型,一定要将其 “装箱”成对应的”基本类型包装类”。
1.2 继承体系
在这里插入图片描述

Collection 是集合,两个直接子接口是List和set
List 特性 : 有序 可重复,保证数据的添加顺序和取出顺序一致
Set 特性 : 无序 不可重复,不能保证数据的添加和取出顺序一致

List 有三个子类 :
ArrayList : 底层是数组,查询和更改效率极高
LinkedList : 底层是双向链表,添加和删除效率要高一些
Vector : 底层也是数组,是线程安全,已废弃,不推荐使用,已被ArrayList代替
Set有两个子类
HashSet : 底层是散列表
TreeSet : 底层是二叉树
1.3 Collection
Collection作为集合类的父类,所以,collection中的方法,是所有集合类都有的方法
1.3.1 常用方法
在这里插入图片描述

1.3.2 使用方式
以ArrayList为例
在这里插入图片描述

1.3.3 Iterator
迭代器

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.3.4 注意

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.4 forEach
在这里插入图片描述

1.5 List
1.5.1 ArrayList

在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.5.2 LinkedList
1.5.2.1 基本使用
在这里插入图片描述在这里插入图片描述在这里插入图片描述

1.5.2.2 底层实现
1.5.2.2.1 节点类
链表由节点构成,因为是双向链表,所以节点中有三个属性
1 保存的数据 Object
2 下一个节点对象 节点类型
3 上一个节点对象 节点类型
在这里插入图片描述

1.5.2.2.2 LinkedList类
在这里插入图片描述

为了首尾添加效率更高,在LinkedList类中保存了首节点和尾结点
1.5.2.2.3 添加-add

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

1.5.2.2.4 获取-get

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

获取数据
在这里插入图片描述

Get方法只是模拟下标获取的方式而已,本质上就是遍历操作
只不过做了一定的判断,判断找前半截快还是找后半截快
1.6 Set和排序
在这里插入图片描述

1.6.1 TreeSet
在这里插入图片描述

在这里插入图片描述

1.6.2 Comparable

在这里插入图片描述

在这里插入图片描述

因为 User没有实现对应的Comparable接口,所以在使用TreeSet的时候,会报错
在这里插入图片描述

1.6.3 Comparator

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.6.4 List排序
在这里插入图片描述

1.6.5 总结

  • Comparable : 如果treeSet中保存我们自己定义的类型的时候,使用Comparable
  • Comparator : 如果treeSet中保存的不是我们写的类型的时候,就要使用Comparator来指定排序规则
  •  比如 Integer 默认是升序排序,假如我们需要降序排序,我们只能使用 Comparator,因为我们不可能去更改Integer的源码
    
  •  但此时 Integer中是有Comparable接口的实现的,等于两个比较都存在,但是Comparator优先级高,
    
  •  所以会按照我们定义的规则进行排序
    
  •  开闭原则 : 对修改关闭,对扩展开发
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值