学习材料声明

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

时间分布

日期

内容

2023年9月13日

复习至点击跳转

2023年9月14日

复习至点击跳转

2023年9月15日

复习至点击跳转

2023年9月16日

复习至点击跳转

2023年9月17日

复习至点击跳转

集合

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

java list 和set 交集 java中的list和set_list

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

java list 和set 交集 java中的list和set_java list 和set 交集_02

  • 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的对比

java list 和set 交集 java中的list和set_list_03

LinkedList

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

ArrayList和LinkedList比较

java list 和set 交集 java中的list和set_List_04

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

Se接口与常用方法

  • 无序,添加和取出的顺序不一致,没有索引。
  • 不允许重复元素,最多包含一个null

HashSet

  • 实际上就是HashMap
HashSet底层机制|数组+链表+红黑树

java list 和set 交集 java中的list和set_java_05

java list 和set 交集 java中的list和set_list_06


java list 和set 交集 java中的list和set_java_07

----------------------------------------------------------------------------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
  • java list 和set 交集 java中的list和set_java list 和set 交集_08

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

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

java list 和set 交集 java中的list和set_java_09

java list 和set 交集 java中的list和set_java_10

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循环

java list 和set 交集 java中的list和set_windows_11

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的三种遍历方式(其他数组和集合应该是一致的)

java list 和set 交集 java中的list和set_java_12