集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。
-
Collection集合的概述
-
是单类集合的顶层接口,他表示一组对象,这些对象也称为Collection的元素。
-
JDK 不提供此接口的任何直接实现,它提供更具体的子接口实现
-
-
创建Collection集合的对象
-
多态的方式
-
具体的实现类ArrayList
-
List集合
List集合的特点
-
有序:存储和取出的元素顺序一致
-
List集合子类特点
-
ArrayList :底层数据结构为数组,其查询快,增删慢。
-
LinkedList:底层树结构为链表,增删快,查询慢。
常见的数据结构
-
栈 : 是一种 --先进后出-- 的模型
-
队列:是一种--先进先出--的模型
-
数组:是一种查询快,增删慢的模型
-
链表:是一种增删快,查询慢的模型
set集合
-
不包含重复元素的集合
-
没有带索引的方法,不能使用普通的for循环
对象哈希值的特点
-
哈希值:是JDK根据 对象的地址 或者 字符串或者数字算出来的int类型的数值。
-
同一个对象多次调用hashCode()方法,返回的哈希值是相同的
-
默认情况下,不同的对象的哈希值是不同的,重写hashCode()方法,可以实现让不同的对象的哈希值相同。
HashSet集合
-
底层数据结构是哈希表
-
对集合的迭代顺序不做任何保证,不保证存储和取出的元素顺序一致。
-
没有带索引的方法,所以不能使用普通for循环
-
由于是Set集合,所以是不包含重复元素的集合。
LinkHashSet
-
哈希表和链表实现的set接口,居于可预测的迭代次序
-
有链表保证元素有序,也就是说元素的存储和取出顺序是一致的
-
有哈希表保证元素唯一,也就是说没有重复的元素。
TreeSet
-
元素有序,这里的顺序不是存储和取出的顺序,而是按照一定的规则进行排序,具体的排序方式取决于构造方法。TreeSet() 根据其元素的自然排序进行排序;TreeSet(Comparator comparator )根据指定的比较器进行排序。
-
没有带索引的方法,所以不能使用普通的for循环
-
由于是Set集合,所以不包含重复元素的集合
自然排序Comparable
package com.yang.aggregate;
import java.util.Objects;
//需要implements Comparable接口,然后重写compareTo()方法
public class Teacher implements Comparable<Teacher> {
private String name;
private int age;
public Teacher() {
}
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
-
用TreeSet 集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序
-
自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
-
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
比较器排序Comparator
-
用TreeSet 集合存储自定义对象,带参构造方法使用的是-比较器-排序
-
比较器排序,就是让集合构造方法接收Compartor的实现类对象,重写compare(To 1,T o2)的方法
-
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写。
//用比较器Comparable
public class Demo08 {
public static void main(String[] args) {
TreeSet<Teacher> t = new TreeSet<>(new Comparator<Teacher>() {
Map 集合
-
Interface Map<K,V> k: 键的类型 V:值的类型
-
将键映射到值的对象;不能包含重复的键,每个键可以映射到最多一个值。
-
map集合的遍历方法
package com.yang.set;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo04 {
public static void main(String[] args) {
Map<String,Student> map = new HashMap<>();
Student s1 = new Student("小黄",20);
Student s2 = new Student("小黄",20);
Student s3 = new Student("小黄",20);
map.put("001",s1);
map.put("002",s2);
map.put("003",s3);
//遍历集合方法1
Set<String> set = map.keySet();//获取所有的键
for (String s:set
) {//遍历键
Student t = map.get(s);//获得value
System.out.println(s+"=("+t.getName()+","+t.getAge()+")");
}
//遍历集合方法二
//获得所有的实体对象
Set<Map.Entry<String, Student>> entries = map.entrySet();
for ( Map.Entry<String, Student> a : entries
) {//遍历对象
String key = a.getKey();
Student value = a.getValue();
System.out.println(key+"="+value.getName()+","+value.getAge());
}
}
}
-
HashMap
package com.yang.set;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
//map集合中存储key是字符串,value是list集合
public class Demo07 {
public static void main(String[] args) {
//创建集合
HashMap<String, ArrayList<String>> hm = new HashMap<>();
ArrayList<String> a1 = new ArrayList<>();
a1.add("小桥");
a1.add("大桥");
ArrayList<String> a2 = new ArrayList<>();
a2.add("乔峰");
a2.add("张无忌");
ArrayList<String> a3 = new ArrayList<>();
a3.add("在那个鳗鱼");
a3.add("任盈盈");
//添加
hm.put("001", a1);
hm.put("002", a2);
hm.put("003", a3);
//遍历
Set<String> keySet = hm.keySet();
for (String s : keySet) {
ArrayList<String> arrayList = hm.get(s);
for (String st : arrayList) {
System.out.println(s+"="+st);
}
}
}
}
package com.yang.set;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class Demo08 {
public static void main(String[] args) {
//键盘录入一串字符
Scanner scanner = new Scanner(System.in);
System.out.println("输入字符");
//接收字符
String s = scanner.nextLine();
//创建集合,这个时无序的。
// HashMap<Character, Integer> hashMap = new HashMap<>();
//这个是有序的,是对key
TreeMap<Character, Integer> hashMap = new TreeMap<>();
//遍历字符串
for (int i = 0; i < s.length(); i++) {
char key = s.charAt(i);//获取每一个字符
Integer value = hashMap.get(key);
if (value == null) {//如果等于null,说明没有这个字符,然后将字符作为键存储,值+1
hashMap.put(key, 1);
} else {
value++;
hashMap.put(key, value);
}
}
//拼接字符串
//创建字符串对象
StringBuilder sb = new StringBuilder();
//遍历hashMap集合
Set<Character> characters = hashMap.keySet();//得到key的集合
for (Character c : characters) {//得到每一个Key
Integer value = hashMap.get(c);//得到value
sb.append(c).append("(").append(value).append(")");//拼接字符串
}
String result = sb.toString();
System.out.println(result);
}
}
package com.yang.set;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
//Collections工具类
//ArrayList集合存储,并排序
public class Demo09 {
public static void main(String[] args) {
//创建集合
ArrayList<Student> array = new ArrayList<>();
//创建学生对象
Student s1 = new Student("hhh", 22);
Student s2 = new Student("eee", 22);
Student s3 = new Student("ccc", 22);
//将学生对象添加进集合
array.add(s1);
array.add(s2);
array.add(s3);
//使用Collections对集合进行排序:年龄按小大,姓名按字母排序
Collections.sort(array, new Comparator<Student>() {
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?