zoukankan      html  css  js  c++  java
  • set——哈希set(hashset)和treeset

    下面是学习的时候写的一些代码:

    1.hashSet的基本使用

    2.hashset的特性

    3.treeSet的基本使用

    4.使用treeSet存自定义对象

    5.比较器和对象的自然排序


     1.hashSet的基本使用

        private static void demo05() {
            //初始化
            HashSet<Integer> hSet = new HashSet();
            //添加
            hSet.add(45);
            hSet.add(77);
            hSet.add(26);
            hSet.add(185);
            hSet.add(523);
            hSet.add(94);
            hSet.add(45);
            
            //特点一:无序
            //特点二:元素不能重复
            System.out.println(hSet);
            
            //移除
            hSet.remove(45);
            //hSet.clear();
            System.out.println(hSet);
            
            //获取
            System.out.println(hSet.size());
            System.out.println(hSet.isEmpty());
            System.out.println(hSet.contains(88));
            
            /*
             * hashSet的迭代方法,同list
             */
            Iterator<Integer> it = hSet.iterator();
            
        }

    2.hashset的特性

    private static void demo06() {
        /*
         * hashset特性
         */
        /*
         * hashset默认大小为16,在存数据时,先通过hash函数算出一个返回值,然后根据返回值计算存在哪个位置
         * 不会按照顺序存进去
         * 哈希表中存储数据是由哈希函数来分布,哈希函数就是元素的hashcode函数
         * 
         * 如果两个元素的hash值相同,
         *             ->再次调用元素的equals方法来比较两个对象是否相同,如果相同就忽略
         *             ->如果equals判断不相同,就会以链表的方式进行挂桶
         */
        
            HashSet<String> hSet = new HashSet();
            hSet.add("t1");
            hSet.add("t1");
            hSet.add("t1");
            hSet.add("t4");
            hSet.add("t5");
            hSet.add("t6");
            
            //迭代
            for (String str : hSet) {
                System.out.println(str);
            }
            
            //整数的哈希值是?
            System.out.println(new Integer(50).hashCode());//50,整数的hash值就是它本身
            System.out.println("a".hashCode());//97,字符的hash值就是ASCII码
            System.out.println("abc".hashCode());//96354,通过hashcode方法进行计算
            
            //对象默认的hash值就是地址的10进制值
            //计算hash值得属性,一般用特殊属性值来进行计算
        }

    3.treeSet的基本使用

    private static void demo07() {
            /*
             * treeSet的基本使用
             * 判断大小是compareTo方法,判断元素相同时compareTo返回0就表示相同,
             */
        //保存整数
        TreeSet<Integer> tSet = new TreeSet<>();
        //添加
        tSet.add(12);
        tSet.add(5);
        tSet.add(97);
        tSet.add(21);
        tSet.add(-1);
        tSet.add(21);
        System.out.println(tSet);
        
        /*
         * treeSet特点:
         *     一:唯一性
         *     二:会自动排序
         */
        
        for (Integer integer : tSet) {
            System.out.println(integer);
        }
        
        //字符串
        TreeSet<String> tSet2 = new TreeSet<>();
        tSet2.add("aaa");
        tSet2.add("bbbb");
        tSet2.add("ccccc");
        tSet2.add("dddddd");
        tSet2.add("OOObb");
        tSet2.add("aaa");
        System.out.println(tSet2);//字符串排序,如果第一个相同就比较第二个大小,以此类推
        
        
        }

    4.使用treeSet存自定义对象

    private static void demo08() {
            /*
             * 使用treeSet存自定义对象
             * 判断是否相同的方法不再是hashcode和equals方法,而是compareTo是否返回0
             */
        TreeSet<Student> tSet = new TreeSet<>();
        tSet.add(new Student("小明8", 25));
        tSet.add(new Student("小明", 21));
        tSet.add(new Student("小明6", 20));
        tSet.add(new Student("小明3", 29));
        tSet.add(new Student("小明9", 18));
        tSet.add(new Student("小明", 21));
        tSet.add(new Student("小明9", 18));
        
        for (Student stu : tSet) {
            System.out.println(stu);
        }
            
        }

    5.比较器和对象的自然排序

    比较器,是自己新建一个类,实现comparator接口。

    public class ComparatorWithPerson implements Comparator<Person>{
        /*
         * 1.不需要定制自然规则,使用比较器来实现排序
       * 此处我新建了一个ComparatorWithPerson类,实现Comparator接口,该接口实现的类型是我定义的person类。
    */ @Override public int compare(Person o1, Person o2) { int ageRes = o1.getAge()-o2.getAge(); int nameRes = o1.getName().compareTo(o2.getName()); // 年龄优先 //return ageRes == 0 ? nameRes : ageRes; // 姓名优先 return nameRes == 0 ? ageRes : nameRes; }

    自然排序就是在我定义的person类中,重写compareTo方法

        /*
         * 2.定制person对象的自然排序规则
         */
        @Override
        public int compareTo(Person o) {
        // 定制排序规则
        int ageRes = this.age - o.getAge();
        int nameRes = this.name.compareTo(o.getName());
        // 年龄优先
        //return ageRes == 0 ? nameRes : ageRes;
        // 姓名优先
        return nameRes == 0 ? ageRes : nameRes;
    }
  • 相关阅读:
    获取数据窗口的report对象 pb
    职业中的人与人。。。
    关于表格的设置
    今天学到的关于UI的一点东西
    给QQ发匿名消息
    这两天在改以前写的程序,很闷,记点流水账,:)
    我也要回家了,给大家道别
    时间过的好快啊,2月1号了,几个问题!
    开始新的一年的新生活..
    @dudu,临走问一下
  • 原文地址:https://www.cnblogs.com/bkytep/p/9615633.html
Copyright © 2011-2022 走看看