持有对象-4
Posted qianyue111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持有对象-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
以上是关于持有对象-4的主要内容,如果未能解决你的问题,请参考以下文章