从头认识java-9.9 set

原创 2015年11月19日 09:31:36

这一章节我们来讨论一些set。

由于set里面的对象的不重复性,因此决定了set里面搜索查询的函数用的非常频繁,因此,我们一般使用hashset,因为它对于搜索进行了特殊的优化处理。

1.HashSet

由于HashSet对对象进行hash操作,因为它的搜索是根据hash码来操作的,因此, 它的输出是无序的。

package com.ray.ch09;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;

public class Test {

	public static void main(String[] args) {
		HashSet<Integer> set = new HashSet<Integer>();
		Random random = new Random();
		for (int i = 0; i < 10000; i++) {
			set.add(random.nextInt(30));
		}
		System.out.println(Arrays.toString(set.toArray()));
	}
}

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 17, 16, 19, 18, 21, 20, 23, 22, 25, 24, 27, 26, 29, 28]


2.TreeSet

如果你需要结果是排序的,那么就应该使用TreeSet,它把对象放置在红黑树上面。

package com.ray.ch09;

import java.util.Arrays;
import java.util.Random;
import java.util.TreeSet;

public class Test {

	public static void main(String[] args) {
		TreeSet<Integer> set = new TreeSet<Integer>();
		Random random = new Random();
		for (int i = 0; i < 10000; i++) {
			set.add(random.nextInt(30));
		}
		System.out.println(Arrays.toString(set.toArray()));
	}
}

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29]


3.set 的不重复性演示

package com.ray.ch09;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

public class Test {

	public static void main(String[] args) {
		HashSet<Integer> set = new HashSet<Integer>();
		for (int i = 0; i < 10; i++) {
			set.add(i);
		}
		System.out.println(Arrays.toString(set.toArray()));
		set.add(12);
		System.out.println(Arrays.toString(set.toArray()));
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(1);
		set.addAll(list);
		System.out.println(Arrays.toString(set.toArray()));
	}
}

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]


4.contains方法

由于set的不可重复性决定了contains方法是set里面使用的最频繁的方法。

package com.ray.ch09;

import java.util.HashSet;

public class Test {

	public static void main(String[] args) {
		HashSet<Integer> set = new HashSet<Integer>();
		for (int i = 0; i < 10; i++) {
			set.add(i);
		}
		System.out.println(set.contains(2));
		System.out.println(set.contains(12));
	}
}


输出:

true
false


5.有些时候我们需要使用排序的不重复的人员名单时,可以优先考虑TreeSet,请注意代码里面的注释。

package com.ray.ch09;

import java.util.Arrays;
import java.util.TreeSet;

public class Test {

	public static void main(String[] args) {
		TreeSet<String> treeSet = new TreeSet<String>(
				String.CASE_INSENSITIVE_ORDER);// 主要是这里设置了排序的属性,只是对字符串有效
		String text = "Aabbye,Caesar,abbe,Bairn,cais,Dagmar,baby";
		String[] names = text.split(",");
		for (int i = 0; i < names.length; i++) {
			treeSet.add(names[i]);
		}
		System.out.println(Arrays.toString(treeSet.toArray()));
	}
}

输出:

[Aabbye, abbe, baby, Bairn, Caesar, cais, Dagmar]


总结:这一章节主要讲述了HashSet以及TreeSet的使用和注意点。


这一章节就到这里,谢谢。

-----------------------------------

目录



版权声明:本文为博主原创文章,未经博主允许不得转载。

从头认识java-17.1 多线程

这一章节我们来讨论一下多线程。1.什么是多线程?多线程(英语:multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于...
  • raylee2007
  • raylee2007
  • 2016年01月10日 08:39
  • 1202

从头认识java-目录

第一章 对象 1.1 编程语言抽象过程以及java的基础特性 1.2 对象-服务提供者 1.3 隐藏具体实现 1.4 复用代码 1.4 复用代码 1.5 继承(1) 1.5 继承(2)...
  • raylee2007
  • raylee2007
  • 2015年10月19日 09:55
  • 8688

从头认识java-4.2 方法重载

这一章节我们来聊一下方法重载。1.为什么需要方法重载?因为在java里面规定,构造器只有一个,那么,如果我需要多种方式来创建对象,那么怎么做?这个时候就需要方法重载,因为构造器全名叫做构造器函数,他是...
  • raylee2007
  • raylee2007
  • 2015年10月25日 23:21
  • 2006

从头认识java-2.2 算术操作符

这一章节来聊一下算术操作符1.自动转换结果类型。package com.ray.ch01; public class Test { public static void main(String[...
  • raylee2007
  • raylee2007
  • 2015年10月22日 10:23
  • 1764

从头认识java-2.1 操作符

这一章节我们来讨论一下操作符。这里面讨论的操作符不是基础只是,而是一些操作符需要注意的点。1.几乎所有的操作符都是操作基础数据类型,=、==和!=例外,还有+=和+可以是用在String上面。下面是三...
  • raylee2007
  • raylee2007
  • 2015年10月21日 14:50
  • 1698

从头认识C—指针

一个指针ptr加上一个整数n后,结果是一个新的指针ptrnew,ptrnew的类型和ptr的类型相同,ptrnew所指向的类型和ptr所指向的类型也相同。 ptrnew的值将比ptr的值增加了n乘s...
  • zhoudengqing
  • zhoudengqing
  • 2014年11月28日 10:58
  • 181

从头认识Spring Cache

概述: Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如EHCache 或者 OSCache),而是一个对缓存...
  • u011659172
  • u011659172
  • 2016年03月10日 11:50
  • 1321

从头认识java-7.2 接口

这一章节我们来讨论一下接口。之前我们已经聊过抽象类,他已经进行了第一步的抽象,把某些方法抽象出来,然后在子类那里实现,但他不是完全抽象。而接口,就是进一步抽象,它里面全是没有实现的方法,所以的方法都在...
  • raylee2007
  • raylee2007
  • 2015年11月08日 14:11
  • 1622

从头认识设计模式-目录

第一章 策略模式01-原始应用场景02-思考过程一:在继承里面增加导入导出方法03-思考过程二:在每一个类里面单独增加方法或者增加接口04-思考过程三:引入设计原则:分离变化与不变的部分05-思考过程...
  • raylee2007
  • raylee2007
  • 2016年03月21日 23:08
  • 1791

从头认识java-9.11 Queue

这一章节我们来讨论一下队列Queue。队列对于并发非常的重要,我们这里只是简单讨论一下,在以后讲述并发的时候将详细展开。1.特性:先进先出,它跟栈的顺序不一样。2.演示方法由于LinkedList实现...
  • raylee2007
  • raylee2007
  • 2015年11月19日 22:52
  • 1864
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从头认识java-9.9 set
举报原因:
原因补充:

(最多只允许输入30个字)