从头认识java-9.9 set

这一章节我们来讨论一些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的使用和注意点。

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

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

目录

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

时间: 2024-11-06 09:52:13

从头认识java-9.9 set的相关文章

[Java]#从头学Java# Java大整数相加

重操旧业,再温Java,写了个大整数相乘先回顾回顾基本知识.算法.效率什么的都没怎么考虑,就纯粹实现功能而已. 先上代码: 1 package com.tacyeh.common; 2 3 public class MyMath { 4 5 public static String BigNumSum(String... n) { 6 int length = n.length; 7 StringBuilder result = new StringBuilder(); 8 //这里判断其实不需

从头学Java【3】——之命名方法

1.命名法 对于变量.数组.方法/函数.类和对象,如何规范地进行命名至关重要,尤其是当程序规模扩大,变量数量激增的情况下.比较著名的命名规则: (1)匈牙利命名法 这种命名方法是由Microsoft程序员查尔斯·西蒙尼(Charles Simonyi) 提出的,C语言中常用此种命名法.标识符的名字以一个或者多个小写字母开头作为前缀:前缀之后的是首字母大写的一个单词或多个单词组合,该单词要指明变量的用途.例如:lpszStr, 表示指向一个以'\0'结尾的字符串(sz)的长指针(lp)变量. (2

从头学Java【4】——之重载及构造方法

1.方法的重载:实现相同功能使用相同方法名: 2.构造方法: 作用:定义对象时给对象的各个属性赋初值: 特点: (1)构造方法名与类名相同:没有返回值和返回类型: (2)给对象属性赋初值时,是通过参数传递实现: (3)构造方法是在创造对象时,跟在new后面执行,不能通过对象或者类来调用构造方法: (4)如果定义类时既给字段进行了赋初值, 也有构造方法, 在创建对象时是先给成员变量赋初值,再执行构造方法的方法体: (5)如果程序员没有定义构造方法,系统会默认一个无参数的构造方法: (6)当程序员定

从头学Java【3】——几个重要的关键字汇总

几个重要的关键字汇总(a表示怎么用?b表示什么时候使用?c表示注意事项) (1)abstract关键字 a.可以修饰类.方法 修饰类时:不能实例化对象:必须被子类继承: 修饰方法时:没有方法体:必须写在抽象类中:必须被子类重写,若子类不重写,也声明为抽象类: b.一般现实中不存在的事物使用抽象类:父类方法,各子类实现方式各不相同时,则此方法在父类中声明为抽象方法; c.不能与这些关键字一起使用:private.static.final:不能修饰构造方法: (2)static关键字 a.可以修饰成

Java学习之开篇—个人随想

现在大三上学期了,家里希望考研,不然觉得我这学校不好找工作,我自己觉得工作还是靠自己,学校就像给人第一眼感觉那样,虽然重要但也只会吸引HR多看两眼,真正留得住HR的还是要有拿的出手的技能. 当初凭着对计算机的热爱硬是选了了这个专业,大一刚进学校什么都不懂,纯粹一个计算机小白,然后大一上学期学了c语言,老师是湘大信工院四大杀手之一,因为又是学校ACM/ICPC比赛教练所以基本让我们用c在oj上刷算法题,刚开始对我有点难,记得当时军训(我们入学1个月后才军训)休息时我拿出手机记事本敲代码:练步时脑子

流行的9个Java框架介绍: 优点、缺点等等

流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是您不需要从头编写Java程序.有许多优秀的Java框架可以编写在Java虚拟机上运行的web和移动应用程序.微服务和REST api. Java框架允许您关注应用程序的业务逻辑,而不是编写数据库连接或处理异常等基本功能.此外,如果您有Java方面的经验,您可以快速入门.这些框架都使用相同的语法,使用

2020年到了,你需要掌握的9大顶级Java框架

全文共2931字,预计学习时长9分钟 图源:Unsplash 离2020年已不足一个月,然而截至目前,Java依旧是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员. 虽然Java不是最直接的语言,但是您不需要从头编写Java程序.有许多优秀的Java框架可以编写在Java虚拟机上运行的web和移动应用程序.微服务和REST api. 自1995年推出以来,Java已被包括ESPN.SnapDeal.阿里巴巴等在内的134861个网站所使用.经过24年的发

在tomcat上全手工部署Servlet3.0

从头写java文件的方式,编译成CLASS文件,加强对SERVLET容器的理解. 稍后试试JAR和WAR包. 文件内容(跟以前用IDE的一样): HelloServlet.java: package cc.openhome; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet

设计模式最后一击

关于这篇文章 设计模式是每个面向对象开发者必备的知识,是面向对象设计的经验之谈.但是设计模式对于工程人员来讲又是模糊的一门技术,因为他没有严格的数学分析与证明,是实践检验下的合理的经验,对于初学者尤其难理解.笔者也曾经困惑于此,随着工程实践的增加,越来越对设计模式明晰起来,因此想写一篇最终的总结,将我对设计模式的理解简洁的写下,力求一针见血,以后便不再纠结于此,也供其他朋友参考.指正和交流. 设计模式基本准则 虽然设计模式是实践下的产物,但是在最初设计时也是遵循了一些共性的原则性的东西,笔者认为

我是落木、

先说下我自己吧,13年毕业,软件工程专业,凭借着知名大学的牌子,顺利进入某知名国企工作.工资水平在当地属于中等偏上,福利很不错,很适合稳定养老. 然而工作了一段时间后,发现在国企毫无成长可言,上升更是要靠着资历和背景关系.工作一年后,我依然无法适应这种国企的氛围和环境,毅然顶着家人的反对,辞职. 因为自己在大学期间有8个月的实习,做android开发. 所以,现在跳槽,依然想回到android开发行列.不管是码农也好,还是加班也好,我都觉得没什么,自己也经历过连续几个月不休息的艰苦岁月. 现在,