持有对象-4

Set

Set不保存重复的元素(至于如何判断元素相同则较为复杂,稍后便会看到)。如果你试图将相同对象的多个实例添加到Set中,那么它就会阻止这种重复现象。Set中 最常被使用的是测试归属性,你可以很容易地询问某个对象是否在某个Set中。正因如此,查找就成为了Set中 最重要的操作,因此你通常都会选择一个HashSet的实现, 它专门对快速查找进行了优化。
      Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。) Set是基于对象的值来确定 归属性的,而更加复杂的问题我们将在以后中介绍。
下面是存放 Integer对象的 HashSet实例
Set<Integer> d=new HashSet<Integer>();
        
        d.add(12);
        d.add(13);
        d.add(14);
        d.add(15);
        d.add(16);
        d.add(17);
        
        System.out.println(d);

你可以看到结果输出没有顺序,这是出于速度的考虑,HashSet使用了散列。HashSet所维护的顺序与TreeSet或者LinkedHashSet都不同,因为他们具有不用的元素实现方式。TreeSet将数据存储在红黑树数据结构中,而HashSet使用的是散列函数。LinkedHashSet因为查询速度的原因也使用了散列函数

,但是它看起来使用链表来维护元素的插入顺序。

如果你想对结果排序,一种方式是使用TreeSet代替

Random rand = new Random(47);
        Set<Integer> s = new TreeSet<Integer>();
        
        for (int i = 0; i < 200; i++) {
            s.add(rand.nextInt(30));
        }
        System.out.println(s);

如果你想要按照字母排序,就在构造器中传入String.CASE_INSENSITIVE_ORDER

Set<String> d = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);//按照字母排序
        
        d.add("a");
        d.add("b");
        d.add("c");
        d.add("d");
        d.add("A");
        d.add("B");
        d.add("C");
        d.add("D");
        
        System.out.println(d);

Map

猜你喜欢

转载自www.cnblogs.com/QianYue111/p/10247614.html