版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/78857857
一、 Set 集合特点:
无序、 无下标、 不重复
HashSet
public static void fun1(){
// 创建一个HashSet
HashSet<Integer> hashSet = new HashSet<>();
// hashset 排序 不重复,无下标
hashSet.add(2);
hashSet.add(1);
hashSet.add(5);
hashSet.add(3);
hashSet.add(4);
hashSet.add(5);
hashSet.add(5);
// 打印hashSet
System.out.println(hashSet); // 打印结果1,2,3,4,5,
}
public static void fun2(){
// 创建一个hashset
// 保存 5 个人 并遍历
// 认为年龄和姓名一样 就是同一个人
// 重写 equals 方法
// 注意: 如果你要使用hashSet 去除重复的对象
// 直接重写 HashCode() 和 equals 方法
// 直接使用快捷键 进行 重写
// DNF 是类
HashSet<DNF> dnfs = new HashSet<>();
dnfs.add(new DNF("震颤的大地",1));
dnfs.add(new DNF("擎天之柱", 2));
dnfs.add(new DNF("震颤的大地", 1));
dnfs.add(new DNF("擎天之柱", 2));
dnfs.add(new DNF("舰炮防御战", 3));
// 增强for 循环 遍历
for(DNF dnf : dnfs){
System.out.println(dnf);
}
//打印结果
//舰炮防御战, 3
//擎天之柱, 2
//震颤的大地,1
}
// 随机10个数,不能重复。1-20
public static void fun4(){
HashSet(Integer) hSet = new HashSet<>();
int num ;
while(hSet.Size() < 10){
// 随机数字
num = (int)(Matn.random()* (20-1+1) +1);
// 将数字 添加到hSet
hSet.add(num);
}
// 打印结果
System.out.println(hSet);
[随机10个 1 - 20 之间的数字]
}
// 输入一个字符串 去掉其中 重复字符
// 打印出不同的字符
// 创建一个set集合
public static void fun5(){
System.out.println("请输入字符串");
// 创建一个Scanner
Scanner scanner = new Scanner;
// 设置一个字符串 接收键盘输入的值
String string = scanner.nextLine();
// 创建一个hashset
HashSet<Character> set = new HashSet<>();
// 转换字符串 成为字符数组
char[] charArray = string.toCharArray();
// 遍历字符数组
for(int i = 0; i < charArray.length; i++){
// 将遍历出来的字符 添加到集合当中
set.add(charArray[i]);
}
// 打印set 集合
System.out.println(set);
}
// 利用Set集合 去除ArrayList 集合中的重复元素(操作原ArrayList)
ArrList<String> list = new ArrList<>();
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("d");
list.add("d");
list.add("e");
// 创建一个hashset 集合
HashSet<String> set = new HashSet<>();
// 将list 集合 添加到 set 元素
set.addAll(list);
// 清空list 中的所有元素
list.clear();
// 将set 中的元素 添加到 list
list.addAll(set);
// 打印list 集合
system.out.println(list);
// 打印结果
// [a, b, c, d, e]
LinkedHashSet
特点:
有序的
// 使用LinkedHashSet 保存 两个 abc
// 是HashSet的子类
// 打印结果按照 输入时候的的顺序打印
LinkedHashSet<String> set = new LinkedHashSet<>();
set.add("c");
set.add("a");
set.add("b");
set.add("a");
set.add("b");
set.add("c");
System.out.println(set);
// 打印结果 c,a,b
TreeSet
特点:
排序 去重
// 创建一个TreeSet 添加几个数字 查看效果
// TreeSet 自动排序 去除重复
TreeSet<Integer> tSet = new TreeSet<>();
tSet.add(1);
tSet.add(3);
tSet.add(2);
tSet.add(5);
tSet.add(5);
tSet.add(3);
tSet.add(4);
tSet.add(5);
tSet.add(17);
tSet.add(15);
System.out.println(tSet);
// 打印结果[1, 2, 3, 4, 5, 15, 17]
public static void fun3() {
// 创建一个TreeSet 添加四个人 查看是否有排序效果
TreeSet<DNF> treeSet = new TreeSet<>();
treeSet.add(new DNF("湮灭之圣所",1));
treeSet.add(new DNF("湮灭之圣所",1));
treeSet.add(new DNF("湮灭之圣所",1));
treeSet.add(new DNF("破坏之圣所",2));
treeSet.add(new DNF("破坏之圣所",2));
treeSet.add(new DNF("破坏之圣所",2));
treeSet.add(new DNF("神圣之圣所",3));
treeSet.add(new DNF("神圣之圣所",1));
treeSet.add(new DNF("神圣之圣所",1));
System.out.println(treeSet);
// 报出异常 在DNF类中 实现 接口Comparable<DNF>
}
public class DNF impliments Comparable<DNF>{
// 重写compareto 方法
public int compareto(DNF o){
int i = this.num - o.getNum();
// 字符串 使用 compareto 比较
return i == 0? this.name.compareTo(o.getName) : i;
}
}
// fun3 打印结果
// [DNF [name=湮灭之圣所, num=1], DNF [name=神圣之圣所, num=1], DNF [name=破坏之圣所, num=2], DNF [name=神圣之圣所, num=3]]
比较器
Comparator
// 比较器
// 集合中 保存字符串 按照字符串长度排序
// 初始化TreeSet 的同时 ,把比较器 传入Treeset 中
public static void fun1(){
TreeSet<String> tSet = new TreeSet<>();
tSet.add("www");
tSet.add("aa");
tSet.add("asdf");
tSet.add("savxz");
tSet.add("aaa");
tSet.add("wbdg");
tSet.add("bsa");
tSet.add("bgas");
System.out.println(tSet);
}
// 写一个比较器
// 创建一个比较器的类
// 实现比较器接口中的方法
public class ComparatorImp implements Comparato<String>{
重写compare 方法
public int compare (String o1, String o2){
int length = o1.length() - o2.length;
int num = lenght == 0 ? o1.compareTo(o2) : num;
return num == 0? 1: num;
}
}
// fun1打印结果
// [aa, aaa, bsa, www, asdf, bgas, wbdg, savxz]