码迷,mamicode.com
首页 > 其他好文 > 详细

持有对象-4

时间:2019-01-10 00:31:09      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:元素   速度   添加   sys   保存   维护   strong   重要   out   

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

 

持有对象-4

标签:元素   速度   添加   sys   保存   维护   strong   重要   out   

原文地址:https://www.cnblogs.com/QianYue111/p/10247614.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!