笔记(day17)集合概述、List、Set、比较器

news2024/12/25 23:53:46

集合Collection

一.概述

​ 集合可以理解为数据结构的封装,根据不同的特性及操作性能进行分类

二.继承体系

image-20240812204536587

三.Collection中常用方法

​ collection是集合中的父类,所以collection中的方法是所有集合中都有的
​ 集合中只能保存引用类型(Object),无法保存基本类型
​ Collection 中并没有查询和修改操作

  1. 判断是否为空 isEmpty();

    Collection c = new ArrayList();
    c.isEmpty();
    
  2. 添加 add

    c.add("");
    
  3. 删除 remove 根据内容删除元素

    c.remove("a");
    
  4. 已有元素个数 size()

    c.size();
    
  5. 是否包含某个元素 contains()

    c.contains(1);
    
  6. 清空集合元素 clean()

    c.clean();
    
  7. 转换为数组 toArray()

    Object[] arr = c.toArray();
    

四.迭代器

4.1 概述

迭代器模式∶它可以使对于序列的底层数据结构的遍历行为与被遍历的对象分离,可以让我们无序关心底层数据结构直接的差异性,提供了统一遍历的标准.(无论底层为何种数据结构都可以使用这个标准进行遍历)

4.2 常用方法

注意 : 迭代器一旦生成,集合不能进行修改,除非重新生成迭代器,也就意味着,在迭代器中删除,只能使用迭代器的remove 不能使用集合的remove

  1. hashNext : 判断是否还有元素(boolean)

  2. next : 光标向下移动一位,并返回指向的数据

  3. remove : 删除当前指向的元素

4.3 forEach

增强for循环foreach是 jdk5.0引入的
语法
会把集合中的每个数据,依次赋值给变量

for(数据类型变量名∶集合){
}

是迭代器iterator的简写方式,如果只是需要做基本的遍历操作,就可以使用使用foreach
但是如果想要做删除操作,还是要使用iterator的,因为foreach无法进行删除操作

public static void main(String[] args){
	Collection c = new ArrayList();
	c.add(1);
	c.add("a");c.add(3);
	for (Object object : c) {
		System.out.println(object);
    }
}

五.List

​ 有序(添加和取出顺序一致)
​ 可重复(可以添加重复数据)

5.2 ArrayList

随机性添加和删除效率较低,查询和修改效率较高

//默认容量为10,每次扩容扩大1.5倍
//创建对象时容量为0,第一次添加数据的时候,长度初始化为10;
ArrayList arr = new ArrayList();
// 尾部添加
arr.add(1);
// 指定位置添加,把数据2添加到第0位上
arr.add(0,2);

//获取 根据下标查询数据
arr.get(0);

//修改 
arr.set(1,12);

//根据内容删除
arr.remove("a");
//传入int,则为根据索引删除
arr.remove(0);
//假如我们要根据内容删除,而这个内容恰好是数字,则需要封装包装类
arr.remove(Integer.valueOf(12));

//遍历
for(int i = 0; i < arr.size(); i++){
	System.out.print(arr.get(i)+" ");
}
for(Object object : arr){
	System.out.print(object);
}

5.3 LinkedList

5.3.1 概述

LinkedList : 底层是一个双向链表,随机性添加和删除效率较高,查询和修改效率较低

5.3.2 使用方法

基本上和ArrayList的使用是一样的

LinkedList arr = new LinkedList();
// 尾部添加
arr.add(1);
arr.add("a");
// 添加到指定位置,把数据2 添加到第0位上
arr.add(0, 2);
// 尾部添加
arr.addLast(4);
arr.offerLast(4);
arr.offer(6);
// 首位添加
arr.push(2);
arr.addFirst(4);
arr.offerFirst(5);
// 核心的添加方法 linkLast 和 linkFirst
		
		
// 获取 根据下标查询数据
System.out.println(arr.get(0));
// 修改 把下标1的值换成12
arr.set(1, 12);

// 根据内容删除
arr.remove("a");
// 传入int,则为根据索引删除
arr.remove(0);
// 假如我们要根据内容删除,而这个内容恰好是数字,则需要封装包装类
arr.remove(Integer.valueOf(12));
System.out.println(arr);

arr.add(1);
arr.add(12);
arr.add(31);
arr.add(3);
arr.add(5);
for (int i = 0; i < arr.size(); i++) {
	System.out.println(arr.get(i));
}
for (Object object : arr) {
	System.out.println(object);
}
	

5.3.3 Get方法实现理念

image-20240812204601822

​ 链表是不支持下标的,只是提供了类似于下标的操作方式,但是本质还是利用循环,一个一个去找,跟数组的下标访问压根不是一回事儿

5.3.4 linkedList类

image-20240812204611127

5.3.5 Node节点类

image-20240812204620821

5.3.6 添加底层实现

image-20240812204632986

image-20240812204640937

5.3.7 删除

image-20240812204649626

image-20240812204659194

六.set

6.1 特性

无序 : 不保证有序, 可能有序, 可能无序
不可重复 : 不能添加重复数据
不能做修改和查询操作

6.2 TreeSet

6.2.1 特征

底层是红黑树,添加的元素会按照特定的顺序进行排序
数字 : 从小到大
日期 : 自然日期
字符串 : 按照每位的ASCII码值进行排序
既然会排序,说明一定会进行比较不同类型是没有可比性的,因此treeSet必须保存同一类型

6.2.2 使用

​ 没有查询和修改功能

TreeSet ts = new TreeSet);
//添加
ts.add(1);
ts.add(12);
ts.add(3);
ts.add(9);
//java.lang.ClassCastException: java.lang.Integer cannot be cast toll java.lang.String
// ts.add("aa");
//根据内容删除
ts.remove(2);
//没有查询和修改功能
ts.size();
ts.isEmpty();
ts.contains(2);
ts.clear();
System.out.println(ts);

6.2.3 注意

TreeSet set = new TreeSet();
set.add("1");
set.add("7");
//没有重复数据
set.add("1");
//先比较第一位,按位比较
set.add("14");
set.add("16");
set.add("6");
System.out.print(set);//1 14 16 6 7;

6.3 HashSet

6.3.1 概述

​ 底层是Haspmap,set其实就是map的key部分,因此不能做查询和修改操作

七.排序

7.1 comparable

​ 为什么会自动排序呢?因为添加的这些对象的类,都实现了Comparable接口,并实现了compareTo方法
​ 要排序的类会根据compareTo方法的返回值,进行排序
​ 返回0说明相等,就不添加
​ 返回小于0的值,就说明要添加的元素比集合中的小,就会被放到前面
​ 返回大于0的值,就说明要添加的元素比集合中的大,就会被放到后面
​ 因此我们自定义的类想要被排序,就要实现comparable接口并覆写compareTo方法

public class Test_01 {
	public static void main(String[] args) {
		TreeSet ts = new TreeSet();
		ts.add(new User(18, "张三"));
		ts.add(new User(16, "张三"));
		ts.add(new User(19, "张三"));
		ts.add(new User(15, "张三"));
		for (Object object : ts) {
			System.out.println(object);
		}	
	}
}
class User implements Comparable{
	@Override
	public int compareTo(Object o) {
		if(o instanceof User){
			User user = (User) o;
			return user.age - this.age;
		}
		return 0;
	}

	private int age;
	private String name;
	
	public User(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	
	public User() {
		super();
	}
	
	@Override
	public String toString() {
		return "User [age=" + age + ", name=" + name + "]";
	}
}

7.2 comparator

​ 数字会默认从小到大排序,那么如果我们的需求是,要求数字从大到小排序呢?
​ 数字升序是因为Integer类中有compareTo方法,并定义了升序排序,而我们并没有办法去修改Integer类中的源码,但是我们可以扩展Comparator:比较器类,当comparable和comparator同时存在的时候.comparator优先级大于comparable
应用场景︰
​ 如果保存的元素的类,是我们写的,肯定要实现comparable接口
​ 如果保存的元素的类,不是我们写的,并且排序规则也无法满足我们的需求,需要使用comparator来进行扩展

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
 
class User implements Comparator<User> {
    private String name;
    private int age;
    private boolean sex;
 
    public User() {
    }
 
    public User(String name, int age, boolean sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public boolean isSex() {
        return sex;
    }
 
    public void setSex(boolean sex) {
        this.sex = sex;
    }
 
    @Override
    public int compare(User o1, User o2) {
        return o1.age-o2.age;
    }
}
public class Test{
    public static void main(String[] args) {
        User user1=new User("dingli",25,true);
        User user2=new User("huxiaojuan",24,false);
        User user3=new User("xxx",24,false);
        List<User> list=new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        Collections.sort(list, new User()); //类实现了的Comparator能满足需求
        System.out.println("类自身实现Comparator:"+list);
        //现在我想要按照名字升序,显然类中实现的不能满足要求,于是可以在类外自己实现想要的比较器
        Collections.sort(list, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getName().compareTo(o2.getName()); //按照名字升序
            }
        });
        System.out.println("匿名内部类方式:"+list);
        //由于Comparator接口是一个函数式接口,因此根据jdk1.8新特性,我们可以采用Lambda表达式简化代码
        Collections.sort(list,(u1,u2)->{return u1.getName().compareTo(u2.getName());});
        System.out.println("Lambda表达式方式:"+list);
    }
}

7.3 Collections

​ Collections.sort() 方法是用于对 List 集合中的元素进行排序的。这个方法有两个重载版本:一个接受一个 List 参数(要求列表中的元素实现了 Comparable 接口),另一个接受一个 List 参数和一个 Comparator 参数(允许你指定一个自定义的比较器)。

public static void main(String[] args) {
		ArrayList al = new ArrayList();
		al.add(1);
		al.add(16);
		al.add(5);
		al.add(2);
		al.add(7);
		
		Collections.sort(al);
		System.out.println(al);//[1, 2, 5, 7, 16]
		Collections.sort(al,new Comparator() {
		
			@Override
			public int compare(Object o1, Object o2) {
				return (Integer)o2 - (Integer)o1 ;
			}
		});
		System.out.println(al);//[16, 7, 5, 2, 1]
	}

7.4 总结

  • Comparable 是“比较”的意思,而 Comparator 是“比较器”的意思;
  • Comparable 是通过重写 compareTo 方法实现排序的,而 Comparator 是通过重写 compare 方法实现排序的
  • 一个类只有实现了Comparable接口才支持排序,当一个类已经实现Comparable接口但是他的排序方式不满足我的需求时,才使用Comparator接口来满足需求
  • 自己写的类优先实现Comparable接口
  • 当一个类没有comparab接口是时没办法直接进行排序的,必须去再次实现Comparator接口才可以排序(就算类实现了Comparator接口也无法直接使用Collections.sort() 方法排序)
  • 当Comparable和Comparator同时存在时,Comparator优先级高

使用规则:

  • 如果排序逻辑是要排序的对象固有的并且不会更改,使用 Comparable。
  • 如果需要定义多个排序规则或对未实现 Comparable 的对象进行排序时,使用 Comparator。
  • 如果一个类实现了 Comparable 接口支持自然排序,仍然可以使用 Comparator 进行自定义排序。

八.散列表

8.1 概述

​ 存放单链表的数组(数组里存放的是节点)
​ (Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。

8.2 底层实现

​ java中,把散列表封装在HashTable HashMap 和 HashSet中,HashTable已经过时,不推荐使用,被HashMap代替
​ 需要注意 : 使用散列表,需要 同时覆写equals方法和hashCode方法,才能确保数据的唯一性节点中包含4个属性 : key , value , hash , next

添加过程 :

  1. 调用key的hashCode方法,生成hash值
  2. 进行hash算法得到对应的值
  3. 生成数组下标,判断该位置是否有数据
  4. 如果没有数据,则创建节点对象,把key和value保存在节点中,并把节点对象 保存在数组中
  5. 如果有数据,则调用key的equals方法和对应链表中每一个数据进行比较
  6. 如果相同,则不添加,但是value值覆盖原来的value
  7. 如果都不相同,说明他们只是下标一样,内容并不一样,所以把该节点对象插入在链表的尾部
  8. 1.8开始新特性,为了提高查询效率,引入红黑树,因为链表查询效率较低,所以会在添加的时候进行判断如果链表个数大于等于7,把该链表转换为红黑树存储

​ HashMap默认初始化容量为16,并且默认加载因子是0.75 (16*0.75=12 , 也就是说到达12个就开始扩容)

九.map

9.1 HashMap

key不可以重复, value 可以重复

public static void main(String[] args) {
Map map = new HashMap();
// 添加
map.put("A", 11);
map.put("A", 12);
map.put("B", 11);
map.put("B", 13);
System.out.println(map);// {A=12, B=13}
// 查询 根据key值查询 value的值
System.out.println(map.get("A"));// 12
System.out.println(map.get("B"));// 13

// 改 , 和添加一样,已有key为修改,没有的key 为添加
map.put("B", 17);

// 删除 根据key删除整个映射关系
map.remove("A");
System.out.println(map);// {B=17}

// 个数
System.out.println(map.size());// 1

// 判断是否包含某个key
System.out.println(map.containsKey("A"));// false

// 判断是否包含某个value
System.out.println(map.containsValue(17));// true

// 清空
map.clear();
System.out.println(map);// {}

map.put("A", 13);
map.put("B", 23);
		
// keySet 获取所有的类封装到set中返回
Set set = map.keySet();
for (Object object : set) {
	System.out.print(object + " : " + map.get(object)+" ");//A : 13 B : 23 
}System.out.println();
		
// values 获取所有value并封装到集合中返回
Collection values = map.values();
for (Object object : values) {
	System.out.print(object+" ");//13 23 
}System.out.println();
		
// entrySet 把key和value封装到entry对象中,并保存在set中返回
Set entrys = map.entrySet();
for (Object object : entrys) {
	Entry entry = (Entry) object;
	System.out.print(entry.getKey()+" : "+entry.getValue()+" ");//A : 13 B : 23 
	}
}

9.2 TreeMap

​ 使用treeMap ,key元素类,必须实现Comparable接口并覆写compareTo方法注意treeMap中,排序是按照key进行的和value没有关系

public static void main(String[] args) {
	TreeMap map = new TreeMap();
	map.put("a",12);
	map.put("b",11);
    map.put("x",10);
    map.put("a1",22);
	System.outprintln(map);
}

十.泛型

10.1 概述

​ 在编译时,进行类型检查
​ 默认集合中是可以保存任意类型元素的(Object),使用泛型后可以使类型统一
​ 因为我们在使用集合的时候,虽然可以保存任意类型元素,但是往往我们只会保存同一种类型由于内部是Object类型,导致所有类型存储的时候都会发生多态,而多态丢失子类特有的属性
​ 因此我们使用的时候,需要向下转型(强制类型转换)如果使用泛型,则不再需要类型转换,使用更方便
泛型只能写引用类型

10.2 使用

public static void main(String[] args) {
	List<Integer> list = new ArrayList<Integer>();
	list.add(2);
	list.add(5);
	list.add(1);
	//报错,只可以添加int类型的数据
	//list.add("2");
}
TreeMap map = new TreeMap();
map.put("a",12);
map.put("b",11);
map.put("x",10);
map.put("a1",22);
System.outprintln(map);

}


# 十.泛型

## 10.1 概述

​	在编译时,进行类型检查
​	默认集合中是可以保存任意类型元素的(Object),使用泛型后可以使类型统一
​	因为我们在使用集合的时候,虽然可以保存任意类型元素,但是往往我们只会保存同一种类型由于内部是Object类型,导致所有类型存储的时候都会发生多态,而多态丢失子类特有的属性
​	因此我们使用的时候,需要向下转型(强制类型转换)如果使用泛型,则不再需要类型转换,使用更方便
​	**泛型只能写引用类型**

## 10.2 使用

```java
public static void main(String[] args) {
	List<Integer> list = new ArrayList<Integer>();
	list.add(2);
	list.add(5);
	list.add(1);
	//报错,只可以添加int类型的数据
	//list.add("2");
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2033580.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记一次CSDN认证模块后端未校验漏洞

前言 作为一个程序员&#xff0c;一直充满好奇心&#xff0c;没事就喜欢找找漏洞&#xff0c;试想一下某些程序是否存在某些鉴权等漏洞&#xff0c;目前该漏洞已提交官方&#xff0c;且影响不大&#xff0c;现分享分析过程用于各位技术学习。 漏洞分析 https://i.csdn.net/#…

【Hot100】LeetCode—3. 无重复字符的最长子串

目录 1- 思路滑动窗口 2- 实现⭐3. 无重复字符的最长子串——题解思路 3- ACM 实现 原题链接&#xff1a;3. 无重复字符的最长子串 1- 思路 滑动窗口 借助 HashSet 来实现判重通过指针 i 和 right 指针实现一个滑动窗口 2- 实现 ⭐3. 无重复字符的最长子串——题解思路 clas…

webrtc一对一视频通话功能实现

项目效果 实现原理 关于原理我就不做说明&#xff0c;直接看图 WebRTC建立的时序图 系统用例逻辑 搭建环境 turn服务器&#xff1a;Ubuntu24.04搭建turn服务器 mkcert的安装和使用&#xff1a;配置https访问 必须使用https协议&#xff0c; 由于浏览器的安全策略导致的&am…

图像处理中的图像梯度和幅值是什么???(通俗讲解)

在边缘检测和特征提取等任务中&#xff0c;图像的梯度和幅值是图像处理中非常重要的概念。 目录 一、图像的梯度1.1 专业解释1.2 通俗理解1.3 计算方式 二、梯度的幅值2.1 专业解释2.2 通俗理解2.3 计算方式 一、图像的梯度 1.1 专业解释 图像的梯度可以看作是图像中亮度或颜…

基于智能手机的3D模型快速生成技术

摘要&#xff1a; 本文介绍了一种创新技术&#xff0c;该技术允许用户通过智能手机拍摄视频&#xff0c;快速将2D图像转换为3D模型。这项技术为3D内容创作提供了一种高效且用户友好的解决方案。 关键词&#xff1a; 3D建模&#xff0c;智能手机&#xff0c;AI处理&#xff0c;…

【递归】1.汉诺塔问题

面试题 08.06. 汉诺塔问题 leetcode链接&#xff1a;https://leetcode.cn/problems/hanota-lcci/description/在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。 一开始&#xff0c;所有盘子自上而下按升序依次套在第…

WMS如何实现与TMS的双向信息流?

要实现仓储管理系统&#xff08;WMS&#xff09;与运输管理系统&#xff08;TMS&#xff09;之间的双向信息流&#xff0c;可以通过以下几个步骤进行集成&#xff1a; —————————————————— 1、需求分析&#xff1a; 1):确定WMS和TMS之间需要传输的数据类型&…

“小巨人”『南斗六星』×企企通,携手推动华中地区智能网联企业供应链数字化发展

近日&#xff0c;湖北省知名“小巨人”企业——南斗六星系统集成有限公司&#xff08;以下简称“南斗六星”&#xff09;与企企通达成合作&#xff0c;并成功召开数字化建设项目启动会议。 由南斗六星总经理带头的各部门骨干&#xff0c;以及企企通华中区负责人、项目负责人等一…

小白零基础学数学建模应用系列(二):基于Python的共享单车系统建模与仿真分析

共享单车系统作为一种绿色环保的出行方式&#xff0c;已成为现代城市公共交通的重要组成部分。本文将使用Python编程语言&#xff0c;并结合modsim库&#xff0c;构建并仿真一个共享单车系统的模型&#xff0c;通过这一过程来展示如何进行系统的建模与分析。 文章目录 一、背景…

大厂面试题分享第二期

大厂面试题分享第二期 如果执行了一条命令&#xff0c;"select count(*)from…"&#xff0c;使用哪个引擎更快&#xff0c;为什么&#xff1f;垃圾回收器 CMS 和 G1的区别介绍一下CMS和G1CMS&#xff08;并发&#xff09;垃圾收集器G1垃圾回收器 HTTPS和HTTP的区别主…

网站谷歌SEO优化要注意什么?

就最近我们接触的客户而言&#xff0c;有不少客户连最基本的seo常识都没有&#xff0c;他们固然可能是技术大咖&#xff0c;但如果你还是期望从谷歌seo获取流量&#xff0c;那么&#xff0c;最基本的源代码输出必须要有&#xff0c;正常情况下&#xff0c;整个页面除了动画交互…

windows10和linux(debian12)设置静态ip————附带详细过程

文章目录 0 背景1 linux&#xff08;debian&#xff09;1.1 查看网络配置1.2 获取ip动态分配下的配置1.3 打开网络配置文件1.4 重新启动网络服务1.5 验证设置 2 windows2.1 查看自动获取ip地址下的配置2.2 进行设置 0 背景 因为下位机只能获取固定的ip&#xff08;ip池很小&am…

递归 与 dfs 综合练习(一)

目录 一、找出所有子集的异或总和再求和 1.题目链接&#xff1a;1863. 找出所有子集的异或总和再求和 2.题目描述&#xff1a; 3.解法&#xff08;递归&#xff09; &#x1f335;算法思路&#xff1a; &#x1f335;算法代码&#xff1a; 二、全排列 II 1.题目链接&…

“低代码技术:数字化工厂的加速器与智能制造的桥梁“

引言 随着工业4.0和智能制造的快速发展&#xff0c;数字化工厂成为了现代制造业的核心概念。这一转型不仅依赖于物联网、人工智能、大数据等新兴技术&#xff0c;也需要软件开发的支持。然而&#xff0c;传统的软件开发模式由于其复杂性和周期长&#xff0c;难以快速适应数字化…

案例-华东某财险公司:引入监控易一体化运维软件

在华东这片经济活跃、金融繁荣的热土上&#xff0c;某财险公司作为行业内的佼佼者&#xff0c;始终致力于通过科技创新提升业务运营效率与服务品质。随着公司业务规模的不断扩大&#xff0c;IT基础设施的复杂性和重要性日益凸显&#xff0c;如何实现对庞大IT基础资源的实时监控…

从概念到现实:手机设计可视化如何重塑科技美学

在这个日新月异的数字时代&#xff0c;手机已不仅仅是通讯工具&#xff0c;它更是我们生活方式的延伸&#xff0c;是连接世界的窗口&#xff0c;是创意与科技的完美结晶。 想象一下&#xff0c;在浩瀚的数字海洋中&#xff0c;一款尚未面世的手机&#xff0c;通过高精度的3D建模…

在亚马逊云科技上安全、合规、私密地调用生成式AI大模型

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何安全、合规、私密地调用亚…

2024最全最新VMWare以及Linux配置(含yum失效解决方案)

血泪教训浓缩的精华配置、报错解决&#xff08;解决99%问题&#xff09; 目录 1.Linux环境搭建 1.1安装VMWare 1.1.1卸载老版本VMWare&#xff08;如果有的话&#xff09; 1.1.2开始安装VMware 1.2创建虚拟机 1.3安装Centos7 1.4设置虚拟机快照 1.5安装远程连接SSH客户…

AI换脸模型(384-448模型430万底丹)

模型训练素材19万张来自于 1、香港中文大学CelebA预训练集-WF512版-量大角度全-11万5千张 2、DST全角度训练图集V3.1 WF512【2.6W张 6GB 】 3、女性人脸数据&#xff0c;预训练炼丹专用 4、补全SRC极限角度 5、全角度512分辨率7万张素材 下载地址&#xff1a; 链接&#xf…

day09——集合ArrayList

ArrayList类 ArrayList表示一种集合&#xff0c;它是一个容器&#xff0c;用来存储数据的&#xff0c;类似于数组。但不同于数组&#xff0c;数组一旦创建大小不变&#xff0c;而集合大小是可变的。 ArrayList常用方法 ArrayList是泛型类&#xff0c;可以约束存储的数据类型…