• java -- Set 用法及特点


    分类专栏: java学习

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/firearrow66/article/details/78858118

    Hashset 和 ListHashSet用法及特点

    //  HashSet 和 LinkedHashSet 用法及特点
    /**
     * 编写一个ArrayList集合 用Set去重
     * 为了保证顺序  我们用LinkedHashSet
     */
    public static void fun6() {
        ArrayList<String> aList = new ArrayList<>();
        aList.add("b");
        aList.add("a");
        aList.add("a");
        aList.add("b");
        aList.add("c");
        aList.add("c");
        LinkedHashSet<String> hSet = new LinkedHashSet<>();
        hSet.addAll(aList);
        aList.clear();
        aList.addAll(hSet);
        System.out.println(aList);
    }
    
    /**
     * 编写一个 从键盘键入一连串字符串,将重复的字符串去掉,打印出不通过的字符
     */
    public static void fun5() {
        System.out.println("请输入一连串字符: ");
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.nextLine();
        char[] charArray = s1.toCharArray();
        HashSet<Character> hSet = new HashSet<>();
        for (int i = 0; i < charArray.length; i++) {
            hSet.add(charArray[i]);
        }
        System.out.println(hSet);
    }
    
    /**
     * 编写一个 随机/不重复的 10个数的程序
     * Set集合实现不重复
     */
    public static void fun4() {
        HashSet<Integer> hSet = new HashSet<>();
        while (hSet.size() < 10) {
            int i1 = (int)(Math.random() * (20 - 1 + 1) - 1);
            hSet.add(i1);
        }
        System.out.println(hSet);
    }
    
    /**
     * LinkedHashSet 特点: 有序的(怎么存的可以怎么取出来)
     * 底层实现是链表实现
     * 同样具有Set的去重的特点
     */
    public static void fun3() {
        LinkedHashSet<String> lSet = new LinkedHashSet<>();
        lSet.add("c");
        lSet.add("a");
        lSet.add("a");
        lSet.add("c");
        lSet.add("b");
        lSet.add("b");
        lSet.add("d");
        lSet.add("d");
        for (String string : lSet) {
            System.out.println(string);
        }
    }
    
    /**
     * 去除对象 --- 需要重写HashCode() 和 equals()
     */
    public static void fun2() {
        HashSet<Person> hSet = new HashSet<>();
        hSet.add(new Person("科比" , 18));
        hSet.add(new Person("加索尔" , 19));
        hSet.add(new Person("费舍尔" , 20));
        hSet.add(new Person("拜纳姆" , 21));
        hSet.add(new Person("奥多姆" , 22));
        hSet.add(new Person("奥多姆" , 22));
        hSet.add(new Person("科比" , 18));
        hSet.add(new Person("加索尔" , 19));
        hSet.add(new Person("费舍尔" , 20));
        hSet.add(new Person("拜纳姆" , 21));
        for (Person personCopy : hSet) {
            System.out.println(personCopy);
        }
    }
    
    /**
     * Set接口特点: 无下标 无顺序 **无重复**
     */
    public static void fun1() {
        HashSet<String> hSet = new HashSet<>();
        hSet.add("c");
        hSet.add("a");
        hSet.add("a");
        hSet.add("c");
        hSet.add("b");
        hSet.add("b");
        hSet.add("d");
        hSet.add("d");
    
        for (String string : hSet) {
            System.out.println(string);
        }
    }
    

    TreeSet用法及特点

    //  计数器
    /**
     * 键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩)
     * 按照总分从高到低输出到控制台。
     */
    public static void fun13() {
        System.out.println("请输入姓名及成绩:");
        Scanner scanner = new Scanner(System.in);
        TreeSet<Clases1> tSet = new TreeSet<>();
        while(tSet.size() < 5) {
            String s1 = scanner.nextLine();
            String[] split = s1.split(",");
            int parseInt = Integer.parseInt(split[1]);
            int parseInt2 = Integer.parseInt(split[2]);
            int parseInt3 = Integer.parseInt(split[3]);
            int num = parseInt + parseInt2 + parseInt3;
            tSet.add(new Clases1(split[0], parseInt, parseInt2, parseInt3, num));
    
        }
        System.out.print(tSet);
    }
    
    /**
     * 程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 
     * 把所有输入的整数倒序排列打印.
     */
    public static void fun12() {
        System.out.println("请输入一个字符串");
        Scanner scanner = new Scanner(System.in);
        TreeSet<Integer> tSet = new TreeSet<>(new Compara3());
        while(true) {
            String s1 = scanner.nextLine();
            if (s1.equals("quit")) {
                break;
            }
            int parseInt = Integer.parseInt(s1);
            tSet.add(parseInt);
        }
        System.out.println(tSet);
    }
    
    /**
     * 键盘接受一个字符串  程序对其中所有字符进行排序
     */
    public static void fun11() {
        System.out.println("请输入一串字符串: ");
        Scanner scanner = new Scanner(System.in);
        String s1 = scanner.nextLine();
        char[] charArray = s1.toCharArray();
        TreeSet<Character> tSet = new TreeSet<>(new Compara2());
        for (int i = 0; i < charArray.length; i++) {
            tSet.add(charArray[i]);
        }
        System.out.println(tSet);
    }
    
    /**
     * ArrayList存储无序并且重复的字符串, 要求排序  并且不能去除重复
     */
    public static void fun10() {
        ArrayList<String> aList = new ArrayList<>();
        aList.add("aaa");
        aList.add("asd");
        aList.add("ww");
        aList.add("zz");
        aList.add("CC");
        aList.add("a");
        aList.add("bcd");
        aList.add("aaa");
        TreeSet<String> tSet = new TreeSet<>(new compara1());
        tSet.addAll(aList);
        aList.clear();
        aList.addAll(tSet);
        System.out.println(aList);
    }
    
    /**
     * 使用比较器 比较排序集合中的元素. 要求保留重复
     * 重写比较器comparator<T>接口 实现自己想要的比较方法 
     * 注意:要记着将comparator的实现类要创建在 集合中
     */
    public static void fun9() {
        TreeSet<String> tSet = new TreeSet<>(new compara1());
        tSet.add("aaa");
        tSet.add("asd");
        tSet.add("ww");
        tSet.add("zz");
        tSet.add("CC");
        tSet.add("a");
        tSet.add("bcd");
        tSet.add("aaa");
        System.out.println(tSet);
    }
    
    /**
     * TreeSet存储类对象,进行排序 要在创建对象的类中重写compareTo方法
     * TreeSet存储的是类对象, 就要看compareTo的返回值
     * 返回0  只是一个值
     * 返回正数  按存进顺序 正序
     * 返回负数  按存进顺序 倒序
     * 
     * TreeSet 内部使用 二叉树来存储的
     *  核心:
     *      比我小的数存在左边(返回负数时)
     *      比我大的数存在右边(返回正数时)
     *      不存储,  两个数相等(返回0时)
     * 
     */
    public static void fun8() {
        TreeSet<Man> tSet = new TreeSet<>();
        tSet.add(new Man("科比", 19));
        tSet.add(new Man("乔丹", 20));
        tSet.add(new Man("库里", 21));
        tSet.add(new Man("格林", 18));
        tSet.add(new Man("书豪", 19));
        tSet.add(new Man("书豪", 200));
        System.out.println(tSet);
    }
    
    /**
     * TreeSet的特点: **排序**(去重)
     */
    public static void fun7() {
        TreeSet<Integer> tSet = new TreeSet<>();
        tSet.add(5);
        tSet.add(4);
        tSet.add(1);
        tSet.add(2);
        tSet.add(3);
        tSet.add(5);
        tSet.add(5);
        for (Integer integer : tSet) {
            System.out.println(integer);
        }
    }
    

    总结:
    Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象
    为什么要使用集合类
    当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。

  • 相关阅读:
    多个有序链表的合并
    链表学习
    机器人上楼梯
    字符驱动
    第一个内核模块hello world
    装饰模式(decorator)
    使用WebRTC搭建前端视频聊天室——数据通道篇
    使用WebRTC搭建前端视频聊天室——点对点通信篇
    使用WebRTC搭建前端视频聊天室——信令篇
    使用WebRTC搭建前端视频聊天室——入门篇
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/11949916.html
Copyright © 2020-2023  润新知