- 浏览: 958633 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
一、新建一个类Userfromboss ,其中有id和name属性,都是String类型的 二、写一个函数: @Test public void test(){ String a ="123"; String b ="123"; Set<String> set = new HashSet<String>(); set.add(a); set.add(b); System.out.println(set.size()); Set<Userfromboss> set1 = new HashSet<Userfromboss>(); Userfromboss u1 = new Userfromboss(); Userfromboss u2 = new Userfromboss(); u1.setId("1"); u1.setName("zhangsan"); u2.setId("1"); u2.setName("zhangsan"); set1.add(u1); set1.add(u2); System.out.println(set1.size()); } 打印结果为1,2。结果并不相同 三、修改Userfromboss ,重写这个类的equals和hashcode两个函数 @Override public boolean equals(Object obj) { // TODO Auto-generated method stub return this.getId().equals(((Userfromboss)obj).getId())&&this.getName().equals(((Userfromboss)obj).getName()); } @Override public int hashCode() { // TODO Auto-generated method stub return 1; } 四。再回去打印一下,发现已经是1,1了 五。任意删掉一个重写的函数,打印结果是1,2 六。结论:hashset是同时比较equals和hashcode两个函数的。。同时打开String的源码。可以看到equals和hashcode两个函数如下: public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; } public int hashCode() { int h = hash; if (h == 0) { int off = offset; char val[] = value; int len = count; for (int i = 0; i < len; i++) { h = 31*h + val[off++]; } hash = h; } return h; } 下次重新这两个函数的时候,不要自己重写了,要仿照string类的两个方法来重写哦。O(∩_∩)O~
发表评论
-
关于java堆内存溢出的几种情况
2015-02-28 09:52 1136【情况一】: java ... -
图解TCP-IP协议(转)
2014-09-19 13:28 1055http://www.cricode.com/3568.h ... -
java 线程 整理(转)
2014-03-31 22:46 902java 线程 整理 1,简述 sync ... -
性能调优思考(转)
2013-11-20 19:42 1134前言 这篇文章非常有意思,写于2012年11 ... -
http协议详解(超详细)转
2013-11-06 23:23 1044http://blog.csdn.net/gueter/ar ... -
http协议详解(超详细)转
2013-11-06 23:18 973http://blog.csdn.net/gueter/ar ... -
java垃圾回收精华
2013-10-30 20:22 849本文系翻译: 原文地址:mechanical-sympath ... -
Eclipse快捷键 10个最有用的快捷键(转)
2013-10-28 23:11 867Eclipse快捷键 10个最有用的快捷键 ... -
深入理解Java Proxy机制(转)
2013-10-06 16:25 1057动态代理其实就是java.lang.reflect.P ... -
8 张图助你更好地理解 Java 编程(转)
2013-09-24 22:11 749所谓一图胜万言,本文中的这些图都是从ProgramCreek ... -
Java中堆与栈详解
2013-08-25 21:15 1024http://bbs.itcast.cn/thread-16 ... -
正确读取与设置缓存方法
2013-07-22 20:13 1302正确读取与设置缓存方法 博客分类: 并发编程 ... -
JAVA集合小结
2013-07-16 22:57 889JAVA集合小结 http://www.blogjava. ... -
四种java内部类总结
2013-07-15 19:11 7803第一 成员内部类 定义在另一个类的内部,而且与成员方法和属性 ... -
全国(大学)高等教育各学科视频教学全集
2013-05-30 20:01 2252为了方便已就 ... -
让你彻底明白JAVA中堆与栈的区别
2013-04-24 23:49 1029简单的说: Java把内存划分成两种:一种是栈内存,一种是堆 ... -
JDK中有关23个经典设计模式的示例
2013-04-23 21:55 766Structural(结构模式) Adapter: 把一个 ... -
JDK1.5/1.6/1.7之新特性总结
2013-03-19 21:59 1068开发过程中接触到了从jdk1.5---jdk1.7的使用,在 ... -
java中String和StringBuffer的区别(转载)
2013-03-14 14:27 922看到这个讲解的不错,所以转一下 在java中有3个类来负责 ... -
高效java异常处理机制
2013-01-30 19:41 1536Java开发人员做出的有 ...
相关推荐
在Java编程中,HashSet是一个非常重要的集合类,它继承自AbstractSet并实现了Set接口。HashSet不包含重复元素,也不保持...通过理解HashSet的工作原理和其提供的方法,能够更好地优化我们的代码,提高程序的执行效率。
HashSet实现原理分析 ...通过源码分析,我们可以更好地理解HashSet的实现原理,提高自己的编程能力和技术水平。同时,通过HashSet的实现机理,我们可以更好地理解Java集合框架的设计理念和实现机理。
深入理解HashSet的底层实现,从无到有实现了HashSet,定义自己的数据结构。
#### 五、深入理解`HashSet`去重 - **`hashCode`算法**:`HashSet`通过计算对象的`hashCode`来确定其在内部哈希表中的位置。如果两个对象的`hashCode`相同,还需要进一步通过`equals`方法判断这两个对象是否真正...
### HashSet类的用法 #### 一、概述 `HashSet`是Java集合框架的一部分,它实现了`Set`接口。`HashSet`不允许重复的元素,并且不保证元素的顺序。...希望这些内容能帮助读者更好地理解和使用`HashSet`。
这个自定义版本通常是为了学习和理解HashSet的底层工作原理而创建的,或者是为了满足特定的性能或功能需求。 HashSet在Java中的核心原理基于哈希表,也称为散列表,它的内部由HashMap实现。哈希表通过计算元素的...
在实际使用中,理解这些特性可以帮助我们更好地利用HashSet,例如在需要快速查找不重复元素的场景下,或者在单线程环境中,HashSet是一个非常实用的选择。然而,在多线程环境下,为了保证线程安全,可以使用`...
3. HashSet与HashMap:掌握哈希表的工作原理,理解HashSet与HashMap的插入、查找效率。 4. HashMap与HashTable:对比两者的异同,了解线程安全的问题。 5. Iterator:遍历集合对象,理解迭代器的remove()方法。 六...
2. Set接口:理解HashSet和TreeSet的实现原理,掌握元素的唯一性与排序规则。 3. Map接口:熟悉HashMap和TreeMap,了解键值对的存储方式及查询效率。 4. 集合操作:学会集合的遍历、添加、删除、查找等基本操作。 ...
- Set接口:理解HashSet和TreeSet的区别,掌握元素的唯一性和排序规则。 - Map接口:学习HashMap、TreeMap和LinkedHashMap的用法,理解键值对的概念。 6. **IO流** - 字节流和字符流:理解输入流和输出流的概念...
总的来说,理解`HashSet`和`TreeSet`的底层实现和特性,可以帮助开发者根据具体需求做出明智的选择。在实际编程中,除了考虑性能,还需要考虑代码的可读性、可维护性和一致性。同时,源码阅读也是提升技能的好方法,...
在Java编程语言中,ArrayList和HashSet是两种常用的集合类,它们各自有其特性和应用场景。在实际开发中,理解它们的差异以及如何有效地利用它们是非常重要的。本篇将深入探讨ArrayList与HashSet的区别,并分析...
在Java编程语言中,集合类是用于存储一组不重复元素的数据结构。HashSet是其中的一种,它属于集合框架的一部分,提供了一种基于哈希表实现的...通过观看相关视频和实践操作,可以加深对HashSet的理解,提升编程能力。
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。...正确理解并使用这些集合类,可以极大地提高程序的效率和可读性。
在C++编程中,HashSet是一种常用的集合数据结构,它提供了存储唯一对象的功能,类似...这种方法虽然可能效率较低,但在某些特定场景下,例如教学、理解数据结构原理或者在资源有限的环境中,它可能会是一个有用的实践。
同时,源码分析也能帮助我们理解HashMap的扩容机制,以及为什么即使两个对象的hashCode相同,它们仍然可以在HashSet中区分(因为equals()方法的正确实现)。 工具在学习和使用集合框架时也扮演着重要角色。例如,...
此外,`HashSet`的实现还展示了如何通过简单的数据结构(如`HashMap`)来构建复杂的集合类型,这对于理解和学习Java集合框架非常重要。 综上所述,面向对象编程中的重用不仅仅局限于继承,还包括组合等多种方式。...
HashSet 和 TreeSet 是 Java 中两种常用的 Set 集合实现,它们都继承自 Set 接口,但实现方式和特性上存在显著差异。...在实际应用中,理解这些集合的工作原理和特性,可以帮助我们更好地设计和优化代码。
在编程实践中,理解它们的区别和应用场景至关重要。 HashSet是基于HashMap实现的,它不保证元素的顺序,允许有null值,但不允许有重复元素。HashSet内部通过哈希函数来定位元素,因此它的插入、删除和查找操作通常...
通过实例学习Java集合框架HashSet,可以帮助开发者更好地理解和使用HashSet,提高编程效率和代码质量。本文将通过实例代码详细介绍HashSet的使用和特点,帮助读者更好地掌握HashSet的使用。 一、元素不能重复 ...