[JAVA] HashSet 、 LinkedHashSet 、TreeSet 的简单应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
    [随机101 - 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]

猜你喜欢

转载自blog.csdn.net/qq_40990836/article/details/78857857