Java复习|10min|集合|Collection中的List和Set

学习材料声明

所有知识点都来自互联网,进行总结和梳理,侵权必删。
引用来源:韩顺平老师的完整笔记

时间分布

日期内容
2023年9月13日复习至点击跳转
2023年9月14日复习至点击跳转
2023年9月15日复习至点击跳转
2023年9月16日复习至点击跳转
2023年9月17日复习至点击跳转

集合

常用的数组,长度一旦固定就没办法改变,增删很麻烦,而且只能存储同一类型的元素;因此集合应运而生。
在这里插入图片描述

集合的框架体系|Collection(List和set)与 Map

在这里插入图片描述

  • Collection都是单列集合;Map是双列集合,即K-V
//Collection
ArrayList arrayList = new ArrayList();
arrayList.add("jack");
arrayList.add("tom");
//Map
HashMap hashMap = new HashMap();
hashMap.put("NO1", "北京");
hashMap.put("NO2", "上海");

Collection的接口与常用方法

Collection是集合里面的父类,它的实现子类中有很多不同的侧重功能。有的可以存放重复数据,有的不行;有的是有序的(List);有的不行(Set)。
----------------------------------------------------------------------------2023年9月13日----------------------------------------------------------

List|元素有序(添加和取出顺序一致)且可重复|支持索引

  1. List接口下实现的类和常用的类
    在这里插入图片描述
    2.以ArrayList为例学习常用方法|索引|添加|删除|子序列

ArrayList底层结构和源码分析

  • 可以存入多个null。
  • 底层由数组实现存储。
  • 线程不安全。
  1. 底层机制和扩容策略
    在这里插入图片描述

----------------------------------------------------------------------------2023年9月14日----------------------------------------------------------

Vector底层结构和源码分析

– 可以存入多个null。

  • 底层由数组实现存储。
  • 线程安全,synchronized。
  1. 底层机制和扩容策略
    在这里插入图片描述

ArrayList和Vector的对比

在这里插入图片描述

LinkedList

  • 同样地,可以添加任意元素(可重复),包括null;
  • 底层实现了双向链表和双端队列特点;
  • 线程不安全,没有实现同步。
  1. 底层操作
    在这里插入图片描述

ArrayList和LinkedList比较

在这里插入图片描述

----------------------------------------------------------------------------2023年9月15日----------------------------------------------------------

Se接口与常用方法

  • 无序,添加和取出的顺序不一致,没有索引。
  • 不允许重复元素,最多包含一个null
    在这里插入图片描述

HashSet

  • 实际上就是HashMap
    在这里插入图片描述
HashSet底层机制|数组+链表+红黑树|

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

----------------------------------------------------------------------------2023年9月16日----------------------------------------------------------

这里注意,要放入HashSet的元素是对象的话,可以在类里面重写equals和hashcode,以实现对排序和比较的要求
//如果 name 和 age 值相同,则返回相同的 hash 值
@Override
public boolean equals(Object o) {
	if (this == o) return true;
	if (o == null || getClass() != o.getClass()) return false;
	Employee employee = (Employee) o;
	return age == employee.age && Objects.equals(name, employee.name);
}

@Override
public int hashCode() {
	return Objects.hash(name, age);
}

LinkedHashSet

  • 是HashSet的子类,底层是LinkedHashMap,维护了数组+双向链表

  • 在这里插入图片描述

  • 意思是?有序的吗?通过双向链表的head和tail在这里插入图片描述

    ----------------------------------------------------------------------------2023年9月17日----------------------------------------------------------

补充知识|迭代器迭代|Iterator的对象称为迭代器,用于遍历Collection集合中的元素

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

Collection col = new ArrayList();
col.add(new Book("三国演义", "罗贯中", 10.1));
col.add(new Book("小李飞刀", "古龙", 5.1));
col.add(new Book("红楼梦", "曹雪芹", 34.6));
//System.out.println("col=" + col);
//现在老师希望能够遍历 col 集合
//1. 先得到 col 对应的 迭代器
Iterator iterator = col.iterator();
//2. 使用 while 循环遍历
// while (iterator.hasNext()) {//判断是否还有数据
// //返回下一个元素,类型是 Object
// Object obj = iterator.next();
// System.out.println("obj=" + obj);
// }
//老师教大家一个快捷键,快速生成 while => itit
//显示所有的快捷键的的快捷键 ctrl + j
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println("obj=" + obj)
}
//3. 当退出 while 循环后 , 这时 iterator 迭代器,指向最后的元素
// iterator.next();//NoSuchElementException
//4. 如果希望再次遍历,需要重置我们的迭代器
iterator = col.iterator();
System.out.println("===第二次遍历===");
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println("obj=" + obj);

补充知识|增强for循环

在这里插入图片描述

List list = new ArrayList();
list.add(new Dog("小黑", 3));
list.add(new Dog("大黄", 100));
list.add(new Dog("大壮", 8));
//先使用 for 增强
for (Object dog : list) {
System.out.println("dog=" + dog);
}

总结|List的三种遍历方式(其他数组和集合应该是一致的)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值