JAVA集合

集合的框架和体系

image-20221228215632375

image-20221228215648787

Collection 接口和常用方法

  1. collection 实现子类可以存放多个元素,每个元素可以是 Object
  2. 有些 Collection 的实现类,可以存放重复的元素,有些不可以
  3. 有些 Collection 的实现类,有些是有序的(List),有些不是有序的(Set)
  4. Collection 接口没有直接的实现子类,是通过它的子接口 Set 和 List 来实现的
方法说明
add添加单个元素
remove删除指定元素
contains查找元素是否存在
size获取元素个数
isEmpty判断是否为空
clear清空
addAll添加多个元素
containsAll查找多个元素是否存在
removeAll删除多个元素

使用 Iterator(迭代器) 遍历元素

  1. Iterator 对象称为迭代器,主要用于遍历 Collection 集合中的元素
  2. 所有实现了 Collection 接口的集合类都有一个 iteraor()方法,用以返回一个实现了 Iterator 接口的对象,即可以返回一个迭代器
  3. Iterator 仅用于遍历集合,Iterator 本身并步存放对象

使用增强 for 循环来遍历元素🚩

增强 for 循环就是简化版的 iterator,本质一样。只能用于遍历集合或数组。

for (Object dog : list) {
	System.out.println("dog=" + dog);
}

List 接口和常用方法

List 接口的基本介绍

  1. List 集合类中元素有序(即添加顺序和取出顺序一致),且可重复

  2. List 集合中的每个元素都有其对应的顺序索引,即支持索引

  3. List 集合中的元素可以根据序号取,即 list.get()

  4. JDK API 中 List 接口的实现类中常用的有:ArrayList、LinkedList、Vector

List 接口的常用方法

  1. void add(int index,Object ele) 在 index 位置插入 ele 元素
  2. boolean addAll(int index, Collections eles) 从 index 位置开始将 eles 中的所有元素添加进来
  3. Object get(int index):获取指定 index 位置的元素
  4. int indexOf(Object obj):返回 obj 在集合中首次出现的位置
  5. int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
  6. Object remove(int index):移除指定 index 位置的元素,并返回此元素
  7. Object set(int index, Object els):设置指定 index 位置的元素为 ele
  8. List subList(int formIndex, int toIndex):返回从 fromIndex 到 toIndex 位置的子集合

List 的遍历

建议使用增强 for 循环

for(Object o: col){
    
}

ArrayList 底层结构和源码分析🚩

Vector 底层结构和源码分析🚩

LinkedList 底层结构和源码分析🚩

Set 接口和常用方法

Set 接口基本介绍

  1. 无序(添加和取出的顺序不一致),没有索引
  2. 不允许重复元素,所以最多包含一个 null
  3. JDK API 中 Set 接口的实现类常见的有:HashSet、TreeSet

Set 接口的常用方法****和遍历方式

和 List 接口一样

HashSet 底层结构和源码分析

LinkedHashSet 底层结构和源码分析

Map 接口和常用方法

Map 接口基本介绍

  1. Map 用于保存具有映射关系的数据:Key-Value
  2. Map 中的 key 和 value 可以是任何引用类型的数据,会封装到 HashMap$Node 对象中
  3. Map 中的 key 不允许重复,Map 中的 value 可以重复
  4. Map 的 key 可以为 null,value 也可以为 null,注意 key 为null只能有一个,value 为 null,可以多个
  5. 常用 String 类作为 Map 的 key
  6. key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到对应的 value

map 接口常用方法

  1. put 添加
  2. remove 根据键删除映射关系
  3. get 根据键获取值
  4. size 获取元素个数
  5. isEmpty 判断个数是否为 0
  6. clear 清除
  7. containsKey 查找键是否存在

map 的六大遍历方式

// 先取出 所有的 Key , 通过 Key 取出对应的 Value
Set keyset = map.keySet();
for (Object key : keyset) {
	System.out.println(key + "-" + map.get(key));
}

HashMap

  1. HashMap 是 Map 接口使用频率最高的实现类
  2. HashMap 是以 key-val 对的方式来存储数据
  3. key 不能重复,但是值可以重复,允许使用 null 键和 null 值
  4. 如果添加相同的 key,则会覆盖原来的 key-val,等同于修改
  5. 与 HshSet 一样,不保证映射的顺序,因为底层是以 hash 表的方式来存储的
  6. HashMap 没有实现同步,因此是线程不安全的,方法没有作同步互斥的操作,没有 synchonized

HashMap 底层结构和源码分析

开发中如何选择集合实现类

  1. 先判断存储类型(一组对象[单列]或一组键值对[双列])

  2. 一组对象[单列]:Collection 接口

    允许重复:List

    ​ 增删多:LinkedList 底层维护了一个双向链表

    ​ 改查多:ArrayList 底层维护了 Object 类型的可变数组

    不允许重复:Set

    ​ 无序:HashSet 底层是 HashMap,维护了一个哈希表 即数组+链表+红黑树

    ​ 排序:TreeSet

    ​ 插入和取出顺序一致:LinkedHashSet,维护数组+双向链表

  3. 一组键值对[双列]:Map

    键无序:HashMap,底层是哈希表,jdk8:数组+链表+红黑树

    键排序:TreeMap

    键插入和取出顺序一致:LinkedHashMap

    读取文件 Properties

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值