从头认识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-9.4 List的简介与性能

这一章节我们来讨论一下List里面的两个常用的容器ArrayList和LinkedList。1.相同之处两个list都是具有顺序的序列2.不同之处ArrayList善于执行查询操作,但是插入操作性能不...

从头认识java-13.4 泛型方法的使用

这一章节我们来讨论一下泛型方法的使用。泛型除了可以作用在类、接口上面,还可以作用在方法上面。1.例子package com.ray.ch13; public class Test { public...

从头认识Spring-2.3 注解装配-@autowired(2)-通过set方法或者其他方法注入

这一章节我们来讨论一下注解装配的@autowired是怎样通过set方法或者其他方法注入?1.domain蛋糕类:(不变)package com.raylee.my_new_spring.my_new...

9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类

遍历集合的N种方式总结 【示例1】遍历List方法1,使用普通for循环 for(int i=0;i//list为集合的对象名     String temp...

从头认识Spring-1.11 注入List或Set(这个例子比较体现代码复用)

这一章节我们来讨论一下注入List或Set。我们章节举的例子是不同的厨师使用不同个烤炉制作出不同的蛋糕。1.domain蛋糕类:(沿用前面章节的蛋糕类)package com.raylee.my_ne...

java基础之对List,Map,Set等集合键值对的简单认识

【一、集合】 特征: 数组:定长。可以放基本数据类型。 List:变长。只能放对象。有序,可重复。 Set :变长。只能放对象。无序,不可重复。 Map :变长。只能放对象。无序,键值对...

Java中Set的深入研究

  • 2007年12月08日 11:01
  • 10KB
  • 下载

从头认识java-15.7 Map(2)-介绍HashMap的工作原理-put方法

这一章节我们来介绍HashMap的工作原理。1.HashMap的工作原理图下图引用自:http://www.admin10000.com/document/3322.html(1)HashMap初始化...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从头认识java-9.9 set
举报原因:
原因补充:

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