zoukankan      html  css  js  c++  java
  • HashSet,TreeSet

    HashSet与TreeSet都实现了Set接口,但是它们有一些小区别:

    看个程序先:

    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.TreeSet;

    public class SetTest
    {
            public static void main(String[] args)
            {
                HashSet<String> set = new HashSet<String>();
                
                set.add("a");
                set.add("b");
                set.add("c");
                set.add("b");
                
                String s = new String("e");
                String s1 = new String("e");
                
                set.add(s1);
                set.add(s);
                
                System.out.println(set);
                
                SetTest test = new SetTest();
                
                SetTest test1 = new SetTest();
                
                System.out.println(test.hashCode());
                
                System.out.println(test1.hashCode());
                
                Iterator<String> iter = set.iterator();
                
                while(iter.hasNext())
                {
                    String value = (String) iter.next();
                    
                    System.out.print(value+",");
                }
                
                TreeSet<String> tree = new TreeSet<String>();
                
                tree.add("D");
                tree.add("A");
                tree.add("C");
                tree.add("E");
                
                System.out.println(" "+tree);
            }
    }

    程序运行结果如下:

    [e, b, c, a]
    31275026
    9192299
    e,b,c,a,
    [A, C, D, E]

    可以看出,实现了Set接口的HashSet和TreeSet它们对于字符串都不会允许有重复的值存在(不同于实现了List接口的那些类,如:ArrayList,LinkedList),即使这些字符串的引用不同,换句话说,不允许有具有相同HashCode的对象存在于HashSet或TreeSet中。那么对于Object类型的参数来说,字符串的这种判断方式并不适用,即使这些Object类型中所有的变量值和变量类型都一样,如果,真的要忽视引用地址的不同,那么可以重写equeals方法和hashCode方法,但是API不推荐我们修改equeals方法。不同的是HashSet中的值存放不是定序的,而TreeSet中的值是有序的。

    另外一个程序:

    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.TreeSet;

    public class CompareTest
    {
        
        public static void main(String[] args)
        {
            
            TreeSet<Person> set = new TreeSet<Person>( new MyCompare());
            
             set.add(new Person('C'));
             set.add(new Person('a'));
             set.add(new Person('A'));
             set.add(new Person('B'));
             set.add(new Person('E'));
             set.add(new Person('f'));
        
             System.out.println(set);
            
             for(Iterator< Person> iter = set.iterator();iter.hasNext();)
             {
                 String value = iter.next().toString();
                
                 System.out.println(value);
                
             }
            
             LinkedList<Integer> link = new LinkedList<Integer>();
            
             link.add(new Integer(5));
             link.add(new Integer(-5));
             link.add(new Integer(-15));
             link.add(new Integer(15));
            
             Comparator< Integer> c = Collections.reverseOrder();//反序方式
            
             Collections.sort(link,c);
            
             for(Iterator< Integer> iter = link.iterator();iter.hasNext();)
             {
                 System.out.print(iter.next()+"   ..   ");
             }
            
             Collections.shuffle(link);//乱序
            
             for(Iterator< Integer> iter = link.iterator();iter.hasNext();)
             {
                 System.out.print(iter.next()+"/");
             }
            
             System.out.println(" max:"+Collections.max(link));
             System.out.println("min:"+Collections.min(link));
        }
    }
    class MyCompare implements Comparator<Object>
    {
        public int compare(Object o1, Object o2)
        {
            String obj1 = o1.toString();
            String obj2 = o2.toString();
            
            return obj2.compareTo(obj1);
        }
    }
    class Person
    {
        char name;
        public Person(char name)
        {
            this.name = name;
        }
        public String toString()
        {
            return String.valueOf(this.name);
        }
    }

    运行结果如下:

    [f, a, E, C, B, A]
    f
    a
    E
    C
    B
    A
    15   ..   5   ..   -5   ..   -15   ..   5/15/-15/-5/
    max:15
    min:-15



  • 相关阅读:
    第12周作业
    一张表格秒懂MES制造执行系统与ERP的区别关系
    spring boot:用dynamic-datasource-spring-boot-starter配置druid多数据源(spring boot 2.3.3)
    spring boot:使mybatis访问多个druid数据源(spring boot 2.3.2)
    linux(centos8):安装分布式事务服务seata(file单机模式,seata 1.3.0/centos 8.2)
    spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
    spring boot: 用thymeleaf嵌套循环展示多层数据(spring boot 2.3.2)
    cmd 命令设置环境变量
    AtCoder Grand Contest 047
    AtCoder Grand Contest 032
  • 原文地址:https://www.cnblogs.com/MedivhQ/p/4074990.html
Copyright © 2011-2022 走看看