这一章节我们来讨论一些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的使用和注意点。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
视频 https://www.bilibili.com/video/BV1914y1s7hi
从头开始学习Java课程-资料来源PillsInformática。
赖世雄英语从头学 下载-附件资源
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
如果从头开始,请按上述顺序遍历文件夹以获得最大的学习体验。 如何使用此存储库 每个 ex* 文件夹中的 Markdown 形式的指南将显示在特定练习中要做什么。 每次练习只修改指定区域的程序代码。 每个特定文件夹中的 ...
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码,并允许更轻松地与 c-periphery 更改同步。 为 c-periphery 生成 JNI 源代码。 生成 autoconf 和 msbuild 源项目以构建本机库。 这将作为本机源 ...
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
自动玩家和挂钩框架的子弹地狱游戏从头后项目- Netdex/twinject-源码
java源码字符串缓冲区 这是 Java String 、 StringBuilder和StringBuffer方法/API 的完整指南。 本指南的源代码示例在我们的本地开发环境中进行了良好的测试,您可以将这些示例用作无错误。 您可以在 上了解更多信息...
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
2D-Java-Tile-Game 我第一次进入 Java 世界!... 一切都是从头开始编写的(从创建一个基本的 JFrame,到制作画布,渲染图形等......)。 在 src 目录中查看我的脚本。 来自 CodeNMore 的灵感: :
如果您了解一点C或JavaScript,本指南就是从头开始学习Java。 这是一个正在进行的工作,应该在下一个Java LTS(Java 17)发布时准备就绪。 所有代码都在启用预览功能的Java 14上运行。 注意:如果您只希望查看...
Jet-Set-Gamify 教程系列侧重于帮助您使用 Playlyfe 平台从头开始创建一个很棒的游戏化应用程序。 你好呀! 您是否希望在您的应用程序之一中使用? 我们可以为您提供帮助! 想看看怎么样? 本系列将向您展示如何! ...
java 源码剖析 Java-Review 说明 这个仓库的建立的原因就是为了在 java 的复习过程中,从源码的角度去认真的钻研一下其内部的原理。 所有的分析和总结都在本人的博客上,希望和大家共同探讨,个人水平有限,有不对的...
Java系列13-Spring Boot 实际上,我们将从头开始逐步开发项目。 我们将详细检查Spring Boot开发环境和体系结构。 借助Spring Boot,我们将探索公司Java项目的基础架构。 您可以通过Spring Framework为自己带来美好的...