- 浏览: 1068982 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
- package collection.lession2;
- import java.util.HashSet;
- import java.util.Set;
- /**
- * 老紫竹JAVA提高教程(2)-认识Set集合之HashSet。<br>
- * Set用来保存不允许重复的数据。可以是任何对象类型。<br>
- * JDK5以后,主类型可以通过autobox 放入Set里面。
- *
- * @author 老紫竹 JAVA世纪网(java2000.net)
- *
- */
- public class Lession2 {
- public static void main(String[] args) {
- // 普通测试
- testNormal();
- // 测试HashSet的特殊性
- testForHashSet();
- testForHashSet2();
- }
- /**
- * 测试保存混合类型的数据.
- */
- public static void testNormal() {
- System.out.println("----- testNormal -----------");
- // Set有多个实现,我们先看看最常用的HashSet
- Set set = new HashSet();
- // 添加一个字符串
- set.add("字符串");
- // 添加一个整数对象
- set.add(new Integer(1));
- // 利用JDK5的特性,增加一个浮点数
- set.add(123.45);
- // 我们看看集合里对象的数量
- System.out.println(set.size());
- // 我们尝试增加一个重复的字符串
- set.add("字符串");
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 我们来测试看看是否集合里包含了某个数据
- System.out.println(set.contains(123.45));
- // 我们从里面把这个浮点数删除
- set.remove(123.45);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- }
- /**
- * 专门针对HashSet的测试。
- */
- public static void testForHashSet() {
- System.out.println("----- testForHashSet -----------");
- HashSet<MyObject> set = new HashSet<MyObject>();
- // 增加一个null对象
- set.add(null);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 再次增加一个null看看
- set.add(null);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- MyObject obj = new MyObject("java2000", 2);
- set.add(obj);
- obj = new MyObject("csdn", 10);
- set.add(obj);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 判断是否包含某个对象
- System.out.println(set.contains(obj));
- obj = new MyObject("java2000_net", 2);
- set.add(obj);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 我们尝试把obj再次放入set看看
- // 并没有增加,因为是重复的
- set.add(obj);
- System.out.println(set.size());
- // 我们构造一个新的对象,内容和前面的相同
- obj = new MyObject("java2000_net", 2);
- set.add(obj);
- System.out.println(set.size());
- // 我们修改一下obj里面的年龄,再看看
- obj.setAge(3);
- // 我们再测试看看是否包含此对象。
- // 请注意,我们这个obj和前面的obj是同一个对象
- // 我们仅仅修改了一下我们的年龄
- System.out.println(set.contains(obj));
- // 我们尝试把obj再次放入set看看
- // 我们又增加了长度
- set.add(obj);
- System.out.println(set.size());
- }
- /**
- * 专门针对HashSet的测试2。
- */
- public static void testForHashSet2() {
- System.out.println("----- testForHashSet2 -----------");
- HashSet<MyObject2> set = new HashSet<MyObject2>();
- MyObject2 obj = null;
- for (int i = 0; i < 3; i++) {
- obj = new MyObject2("java2000" + i, i);
- set.add(obj);
- System.out.println(set.size());
- }
- }
- }
- class MyObject {
- private int age;
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- MyObject(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public boolean equals(Object obj) {
- System.out.println("equals");
- if (obj == null || !(obj instanceof MyObject)) {
- return false;
- }
- MyObject o = (MyObject) obj;
- return this.age == o.age && this.name.equals(o.name);
- }
- public int hashCode() {
- int hashCode = name.hashCode() + String.valueOf(age).hashCode();
- return hashCode;
- }
- }
- class MyObject2 {
- private int age;
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- MyObject2(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public boolean equals(Object obj) {
- System.out.println("equals");
- if (obj == null || !(obj instanceof MyObject2)) {
- return false;
- }
- MyObject2 o = (MyObject2) obj;
- return this.age == o.age && this.name.equals(o.name);
- }
- public int hashCode() {
- return 1;
- }
- }
- class MyObject3 {
- private int age;
- private String name;
- // 采用一个变量进行控制
- // 一旦生成了hashCode,则不再变动
- private int HASHCODE = Integer.MIN_VALUE;
- public int hashCode() {
- if (HASHCODE == Integer.MIN_VALUE) {
- // 重新生成本类的hashCode
- HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
- }
- return HASHCODE;
- }
- }
老紫竹JAVA提高教程(2)-认识Set集合之HashSet收藏
新一篇: 济南的初冬,近几年首次在外面单独过周末 | 旧一篇: 老紫竹JAVA基础培训(11),方法的Override
<script></script> 原文地址:http://www.java2000.net/p11767集合在Java里面的作用非凡,我们常用的有Set,List和Map三种,我们先熟悉一下Set,特别是HashSet的使用
- package collection.lession2;
- import java.util.HashSet;
- import java.util.Set;
- /**
- * 老紫竹JAVA提高教程(2)-认识Set集合之HashSet。<br>
- * Set用来保存不允许重复的数据。可以是任何对象类型。<br>
- * JDK5以后,主类型可以通过autobox 放入Set里面。
- *
- * @author 老紫竹 JAVA世纪网(java2000.net)
- *
- */
- public class Lession2 {
- public static void main(String[] args) {
- // 普通测试
- testNormal();
- // 测试HashSet的特殊性
- testForHashSet();
- testForHashSet2();
- }
- /**
- * 测试保存混合类型的数据.
- */
- public static void testNormal() {
- System.out.println("----- testNormal -----------");
- // Set有多个实现,我们先看看最常用的HashSet
- Set set = new HashSet();
- // 添加一个字符串
- set.add("字符串");
- // 添加一个整数对象
- set.add(new Integer(1));
- // 利用JDK5的特性,增加一个浮点数
- set.add(123.45);
- // 我们看看集合里对象的数量
- System.out.println(set.size());
- // 我们尝试增加一个重复的字符串
- set.add("字符串");
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 我们来测试看看是否集合里包含了某个数据
- System.out.println(set.contains(123.45));
- // 我们从里面把这个浮点数删除
- set.remove(123.45);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- }
- /**
- * 专门针对HashSet的测试。
- */
- public static void testForHashSet() {
- System.out.println("----- testForHashSet -----------");
- HashSet<MyObject> set = new HashSet<MyObject>();
- // 增加一个null对象
- set.add(null);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 再次增加一个null看看
- set.add(null);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- MyObject obj = new MyObject("java2000", 2);
- set.add(obj);
- obj = new MyObject("csdn", 10);
- set.add(obj);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 判断是否包含某个对象
- System.out.println(set.contains(obj));
- obj = new MyObject("java2000_net", 2);
- set.add(obj);
- // 我们再次看看集合里对象的数量
- System.out.println(set.size());
- // 我们尝试把obj再次放入set看看
- // 并没有增加,因为是重复的
- set.add(obj);
- System.out.println(set.size());
- // 我们构造一个新的对象,内容和前面的相同
- obj = new MyObject("java2000_net", 2);
- set.add(obj);
- System.out.println(set.size());
- // 我们修改一下obj里面的年龄,再看看
- obj.setAge(3);
- // 我们再测试看看是否包含此对象。
- // 请注意,我们这个obj和前面的obj是同一个对象
- // 我们仅仅修改了一下我们的年龄
- System.out.println(set.contains(obj));
- // 我们尝试把obj再次放入set看看
- // 我们又增加了长度
- set.add(obj);
- System.out.println(set.size());
- }
- /**
- * 专门针对HashSet的测试2。
- */
- public static void testForHashSet2() {
- System.out.println("----- testForHashSet2 -----------");
- HashSet<MyObject2> set = new HashSet<MyObject2>();
- MyObject2 obj = null;
- for (int i = 0; i < 3; i++) {
- obj = new MyObject2("java2000" + i, i);
- set.add(obj);
- System.out.println(set.size());
- }
- }
- }
- class MyObject {
- private int age;
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- MyObject(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public boolean equals(Object obj) {
- System.out.println("equals");
- if (obj == null || !(obj instanceof MyObject)) {
- return false;
- }
- MyObject o = (MyObject) obj;
- return this.age == o.age && this.name.equals(o.name);
- }
- public int hashCode() {
- int hashCode = name.hashCode() + String.valueOf(age).hashCode();
- return hashCode;
- }
- }
- class MyObject2 {
- private int age;
- private String name;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- MyObject2(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public boolean equals(Object obj) {
- System.out.println("equals");
- if (obj == null || !(obj instanceof MyObject2)) {
- return false;
- }
- MyObject2 o = (MyObject2) obj;
- return this.age == o.age && this.name.equals(o.name);
- }
- public int hashCode() {
- return 1;
- }
- }
- class MyObject3 {
- private int age;
- private String name;
- // 采用一个变量进行控制
- // 一旦生成了hashCode,则不再变动
- private int HASHCODE = Integer.MIN_VALUE;
- public int hashCode() {
- if (HASHCODE == Integer.MIN_VALUE) {
- // 重新生成本类的hashCode
- HASHCODE = name.hashCode() + String.valueOf(age).hashCode();
- }
- return HASHCODE;
- }
- }
- Set不允许重复
- 允许 null,重复的null只算一个
- 判断是否存在一个数据(是否重复),先判断其hashCode是否存在,若存在再逐个判断hashCode相同的数据是否相等
- 判断是否相等,除了hashCode相等外,还要判断对象引用相等(==),或者 equals
- 如果一个对象的hashCode变动了,会造成找不到这个对象,也就出现了内存泄漏的危险。
发表评论
-
JVM调优总结
2019-07-10 17:14 371https://www.cnblogs.com/andy-zh ... -
JAVA RESULTSET 使用详解
2012-03-20 21:01 3157调用ResultSet中的last()方法时,提示: java ... -
JAVA采用JDBC执行批处理操作注意的问题
2012-03-20 20:50 1978让我们看看如何使用JDBC API在Java中执行批量插入。虽 ... -
java 各种加密算法详细比较
2012-03-15 11:07 2293本篇内容简要介绍BASE64、MD5、SHA、HMAC几种加密 ... -
java:大数据文件写入,读取,分割,排序,合并
2012-03-05 20:21 2037/** * 大数据排序合并 * * @param ar ... -
JAVA 连接池,方便在平时使用
2012-02-21 15:03 1033java连接池使用 -
Java动态代理实现
2012-02-28 09:19 1000Java动态代理实现 在目前的Java开发包中包含 ... -
Java Socket实战之五 使用加密协议传输对象
2012-02-16 13:49 1127本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之四 传输压缩对象
2012-02-16 13:48 1016转载:http://blog.csdn.net/kongxx/ ... -
Java Socket实战之三 传输对象
2012-02-16 13:48 683转载:http://blog.csdn.net/kongxx/ ... -
Java Socket实战之二 多线程通信
2012-02-16 13:47 1150本文地址:http://blog.csdn.net/kongx ... -
Java Socket实战之一 单线程通信
2012-02-16 13:46 1023转载:http://blog.csdn.net/kongx ... -
java5 新增线程池的使用
2012-02-09 09:26 1158package net.itdos.concurrent; ... -
P2P之UDP穿透NAT的原理与实现
2012-01-11 11:03 1252关键词: P2P UDP NAT 原理 穿透 Traveral ... -
火车票网上订票软件
2012-01-11 09:05 1911JAVA程序GOHOME自动抢票成功!非常棒~~~不多说,直接 ... -
java tcp/ip 通讯服务端和客户端
2011-12-15 08:20 1358java tcp/ip 通讯服务端和客户端 -
java 读取服务器上的某个文件,并解决UTF-8 BOM文件的问号问题
2011-11-28 15:16 1435JAVA读取UTF-8 BOM文件的时候会在文件头产生一个?号 ... -
JAVA 多线程学习笔记
2011-10-12 09:03 1073JAVA 多线程学习笔记 -
XBlink 1.0.0版发布,更轻、更快、更好用
2011-10-09 14:47 1314XBlink 1.0.0版发布,更轻、更快、更好用。 ... -
db4o 文件整理(收缩)
2011-09-29 22:26 1484一直都不敢大胆使用db4o,不是因为它不好用,不稳定,而 ...
相关推荐
我们还演示了remove方法来删除一个元素,使用size方法获取了HashSet中元素的数量,并最终使用迭代器遍历了HashSet中的所有元素。 在实际应用中,HashSet因其存储元素的唯一性和对元素添加、删除、查询的高效性而...
如果多个线程同时对一个`HashSet`进行修改操作,那么必须采取额外措施(如使用`synchronized`关键字或`Collections.synchronizedSet()`方法)来保证线程安全。 3. **允许一个null元素**:`HashSet`允许存在一个`null...
HashSet是通过HashMap来实现的,其底层使用HashMap来保存所有元素。这种实现方式让HashSet的操作非常简单高效,因为HashSet的大部分操作,包括添加元素、删除元素、检查元素是否存在等,都是直接调用HashMap的相关...
HashSet是Java编程语言中的一种集合类...然而,在多线程环境下,为了保证线程安全,可以使用`Collections.synchronizedSet`方法来包装HashSet,或者考虑使用ConcurrentHashMap来构建一个线程安全的集合并实现类似功能。
- **`HashSet`与`HashMap`的关系**:实际上,`HashSet`底层是使用`HashMap`实现的,`HashSet`中的元素实际上是`HashMap`的键(key),值(value)为一个固定的静态对象(`PRESENT`)。 #### 七、结论 通过上述分析可以...
Java中的HashSet详解和使用示例 HashSet是Java中一个非常重要的集合类,它继承于AbstractSet,并实现了Set接口。HashSet的主要特点是没有重复元素的集合,它是通过HashMap实现的,不保证元素的顺序,而且HashSet...
- **排序**:如果需要排序的功能,可以选择使用`TreeSet`代替`HashSet`。 - **初始化**:初始化`HashSet`时可以指定初始容量,例如`new HashSet(17)`。 #### 五、总结 综上所述,`HashTable`、`HashMap`和`HashSet...
我们以`HashSetDemo.java`为例,探讨HashSet的使用方法。 `HashSet`是Java中最常用的Set实现类,它基于哈希表(HashMap)实现,提供了快速的插入、删除和查找操作。以下是一些基本的HashSet用法: 1. **创建...
HashSet 是 Java 中的一个集合类,它实现了 Set 接口并提供了...非线程安全:HashSet 类本身不是线程安全的,在多线程环境下需要进行外部同步操作,或者使用 Collections.synchronizedSet 方法封装成线程安全的集合。
对于`HashMap`,尽管`Student`类的`equals()`和`hashCode()`方法未正确实现,但是由于`HashMap`使用的是对象引用作为键,所以每个调用`put()`方法都会覆盖之前的值,最终`map`中只会有最后一个键值对。 综上所述,...
不过,在这个场景中,我们将探讨如何使用`std::vector`来模拟HashSet的行为。 `std::vector`是C++标准库中的动态数组,它允许我们在运行时调整大小。为了用`std::vector`实现HashSet,我们需要关注几个关键点:插入...
理解其内部机制和使用方法,对于编写高效的Java代码至关重要。在黑马程序员_毕向东_Java基础视频教程中,你可能会更详细地学习到关于HashSet的实现原理和实战技巧。通过观看相关视频和实践操作,可以加深对HashSet的...
在Java编程语言中,集合框架是处理数据的重要组成部分,其中`...同时,源码阅读也是提升技能的好方法,通过查看`HashSet`和`TreeSet`的源码,可以更深入地了解它们的工作原理,这有助于优化代码并解决可能出现的问题。
5. 使用场景:ArrayList适合需要按顺序访问元素的情况,HashSet适合需要快速查找、插入和删除且不关心顺序的场景。 在实际开发中,选择ArrayList还是HashSet应根据具体需求来决定。理解这两个数据结构的特点以及...
HashSet作为Java集合框架中一个重要的非同步集合实现,它在JDK 7.0中的底层实现原理是基于...在使用HashSet时,应当注意其线程不安全的特性,同时为了保证元素的唯一性,应当合理地重写hashCode()和equals()方法。
HashSet和TreeSet使用方法的区别解析 HashSet和TreeSet都是Java集合框架中的Set接口实现,用于存储不重复的元素。但是,它们在使用方法和实现机理上有很大的区别。 首先,从使用方法上讲,HashSet和TreeSet都可以...
结合这些特性,HashSet适合在不需要保持元素插入顺序且需要快速查找和删除元素的场景下使用,比如在本例中删除学生。 总的来说,Java中的HashSet是处理无序、去重数据集的有效工具。在实际编程中,我们可以根据需求...
同时,源码分析也能帮助我们理解HashMap的扩容机制,以及为什么即使两个对象的hashCode相同,它们仍然可以在HashSet中区分(因为equals()方法的正确实现)。 工具在学习和使用集合框架时也扮演着重要角色。例如,...
`HashSet`内部使用了一个`HashMap`来存储元素,通过将每个元素映射到一个固定的虚拟值来实现。 ```java public class HashSet<E> extends AbstractSet<E> implements Set, Cloneable, java.io.Serializable { ...
4. 考虑线程安全,如果在多线程环境中使用,可以考虑使用并发集合,如 CopyOnWriteArraySet 或使用Collections.synchronizedSet() 封装 HashSet。 5. 在内存使用上,TreeSet 由于维护排序关系,可能会占用比 HashSet...