- 浏览: 748036 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (419)
- 杂软粉墨 (2)
- 创意灵感 (3)
- 经验记录 (137)
- 开源轨迹 (2)
- sip-communicator (2)
- 闲侃杂谈 (8)
- 问题交流 (24)
- 概念模式 (32)
- 难点备案 (5)
- JwChat (1)
- 中国象棋 (1)
- 教育探索 (6)
- 英语研究 (58)
- 星际争霸 (1)
- 电信知识 (1)
- 软件架构 (3)
- 哲学探索 (26)
- 算法灵魂 (8)
- 近视探索 (6)
- 数学数学 (3)
- 牛角钻尖 (23)
- 至强文言 (3)
- 数据结构 (1)
- 宇宙物理 (2)
- 网络架构 (3)
- 游戏领域 (4)
- 图形处理 (2)
- 修炼之路 (8)
- 读书天地 (20)
- 编解乱码 (2)
- 概念探索 (8)
- 格物致知 (1)
- 其它语言 (1)
- 测试领域 (3)
- 文化风流 (1)
- JQuery (1)
- 網頁領域 (1)
- Unix/Linux (1)
- Inside JVM (1)
- 异常分析 (1)
最新评论
-
suyujie:
引用
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
suyujie:
HTML <a> 标签灰显禁用 -
iamzhoug37:
您能说一下"局部变量不受文本顺序限制" 是 ...
声明前为什么能赋值却不能输出,都是使用
first of all, exhibits the code:
import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; public class Test { int value; Test(int value) { this.value = value; } public boolean equals(Object obj) { if (obj instanceof Test) { Test foo = (Test) obj; return value == foo.value; } else { return false; } } public static void main(String[] args) { ArrayList list = new ArrayList(); HashSet set = new HashSet(); list.add(new Test(1)); set.add(new Test(1)); Iterator i = set.iterator(); while (i.hasNext()) { Test temp = (Test) i.next(); System.out.println(temp.equals(new Test(1))); } System.out.println(list.contains(new Test(1)) + "," + set.contains(new Test(1))); System.out.println(new Test(1).equals(new Test(1)) + "," + set.contains(new Test(1))); } }
about contains, why list is true while set is false?
my answer:
HashSet与ArrayList的contains算法多加入了hashCode的考量
看源码,HashSet的contains方法最终是通过HashMap中的:
/** * Returns the entry associated with the specified key in the * HashMap. Returns null if the HashMap contains no mapping * for the key. */ final Entry <K,V> getEntry(Object key) { int hash = (key == null) ? 0 : hash(key.hashCode()); for (Entry <K,V> e = table[indexFor(hash, table.length)]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k)))) return e; } return null; }
可见,hash和equals方法都是介入因素
但这里奇怪ArrayList和HashSet的contains方法javadoc一模一样,分别是:
Returns
true if this list contains the specified element. More formally,
returns true if and only if this list contains at least one element e
such that (o==null ? e==null : o.equals(e)).
Returns true if this
set contains the specified element. More formally, returns true if and
only if this set contains an element e such that (o==null ? e==null :
o.equals(e)).
开始真是迷惑了一下,若我没考虑错的话,HashSet的解释是否是漏写了hash的相关
若要相同,是否在Test类中再重写hashCode如:
public int hashCode() { return value; }
发表评论
-
RuntimeException为啥不用声明抛出?
2012-11-13 15:04 7466异常,错误都是同一种父类:java.lang.Throwabl ... -
why null is allocated on java stack
2012-06-05 11:45 1191提问: 恩。。。俺的意思是, String str = n ... -
关于Java 泛型 ?extends T 的问题
2012-05-21 11:05 4361http://topic.csdn.net/u/2012051 ... -
hashcode中选择31因子的原因
2010-12-24 13:57 1481源自<<effective java 2nd> ... -
为什么AnonymousInnerClass只能访问final型非同一方法局部变量
2010-09-13 09:39 1447import java.io.IOException; im ... -
URLConnection访问servlet无反应
2010-07-26 09:28 2678这样完整的回路是ok的 客户端 import jav ... -
This is how scientists see the world
2010-07-14 15:36 1014有些东西不清楚,比如右上角什么东东,中间那个看似压强C, ... -
接口能描述成has-a吗
2010-07-10 10:19 1335接口has a什么呢? 如果说接口当作具备某种能力来用,比如X ... -
关于java.util.ResourceBundle
2010-07-05 14:17 4353import java.util.ResourceBundle ... -
ArrayList,Vector线程安全性测试
2010-06-18 09:43 3214import java.util.ArrayList; im ... -
SortedSet去重
2010-06-13 17:06 1337import java.util.Iterator; imp ... -
这个静态内部类实现的单例是迟加载且线程安全的吗?
2010-05-28 13:10 1633public class JiveProperties { ... -
double-checked locking实现的单例模式之volatile
2010-05-26 17:23 3512private volatile static Singlet ... -
死锁的例子描述对吗
2010-05-10 11:20 1105public class Deadlock { stati ... -
java中Adapter是什么概念
2010-04-06 11:30 4945Adapter乃适配器, ... -
编码转换会丢失信息吗
2010-03-09 13:13 1255编码转换会丢失信息吗? 这是个命题,根 ... -
文本文件在系统中的存储与展现方式
2010-02-04 09:38 1136碰到了一个问题,同样的一个properties ... -
servlet如何实现多线程访问同一个实例的多个service方法
2009-12-09 11:22 1625如题,这是我现在想的一个问题,暂存于此,它同一个方法的 ... -
构造方法是静态的吗?
2009-12-03 15:13 1435public class Test { private ... -
关于JTextPane读取RTF多出一行的问题
2009-11-11 11:20 2468代码如下: import java.io.FileInput ...
相关推荐
然后使用contains方法检查HashSet中是否包含特定字符串。我们还演示了remove方法来删除一个元素,使用size方法获取了HashSet中元素的数量,并最终使用迭代器遍历了HashSet中的所有元素。 在实际应用中,HashSet因其...
可以使用`isEmpty()`方法检查`HashSet`是否为空。 ```java if (hs.isEmpty()) { System.out.println("HashSet是空的"); } else { System.out.println("HashSet不是空的"); } ``` 7. **获取元素数量** `...
这种实现方式让HashSet的操作非常简单高效,因为HashSet的大部分操作,包括添加元素、删除元素、检查元素是否存在等,都是直接调用HashMap的相关方法来完成的。 首先,我们来详细了解一下HashSet的基本概念和结构。...
- **`equals`方法的作用**:当两个对象的`hashCode`相同时,`HashSet`会调用这两个对象的`equals`方法来最终确定是否为同一个对象。 - **效率问题**:对于大量数据而言,`HashSet`的效率非常高。哈希表通过`hashCode...
比较遗憾的是,TreeSet 虽然实现起来也比较简单,但它有着和 HashSet 一样的问题,会自动排序 5:LinkedHashSet去重(有序) 从代码和执行结果可以看出,LinkedHashSet 是到目前为止,实现比较简单,且最终生成的新...
- `contains(Object object)`:判断HashSet是否包含指定的元素。 - `isEmpty()`:检查HashSet是否为空。 - `iterator()`:返回一个迭代器,用于遍历HashSet的元素。 - `remove(Object object)`:移除HashSet中指定的...
HashSet提供了多种操作方法,如add()用于添加元素,remove()用于删除元素,contains()用于检查元素是否存在,size()返回集合中元素的数量,isEmpty()判断集合是否为空。此外,HashSet还支持迭代器(Iterator),允许...
在C++编程中,HashSet是一种常用的集合数据结构,它提供了存储唯一对象的功能,类似于Java中的HashSet。虽然C++标准库中没有直接提供HashSet类,但我们可以利用其他容器,如`std::unordered_set`来实现类似的功能。...
综上所述,`HashTable`、`HashMap`和`HashSet`各有其特点和适用场景: - 如果需要线程安全,并且不允许`key`或`value`为`null`,则应选择`HashTable`。 - 如果不要求线程安全,并且希望支持`null`值或`null`键,则...
java HashSet 集合排序,需要通过利用TreeSet集合排序。2013-10-30。
对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,查看 HashSet 的源代码,可以看到如下代码:
综上所述,选择`TreeMap`、`TreeSet`、`HashSet`还是`HashMap`,主要取决于具体的应用需求,比如是否需要保持元素的排序,是否允许重复元素,以及对插入、删除和查找操作速度的要求。正确理解并使用这些集合类,可以...
hashSet底层去重原理
HashSet类提供了添加元素(add())、删除元素(remove())、检查元素是否存在(contains())等方法。在删除学生这个场景中,我们通常会有一个表示学生的类,例如`Student`,它包含一些属性如学号(id)、姓名(name...
HashSet的构造方法还允许从一个已有的Collection集合中创建HashSet对象。此时,构造函数会遍历Collection中的所有元素,并添加到新的HashSet中。这个过程实际上是在内部的HashMap中进行的。 对于HashSet中常见的...
当两个对象的Hashcode相同,HashSet会调用equals()方法进一步判断它们是否真的相等。 Hashcode是一个关键的概念,它是Java中的一个方法,用于将对象映射到一个整数值,通常用于哈希表的实现。每个对象都有一个唯一...
在Java编程语言中,集合框架是处理数据的重要组成部分,其中`...同时,源码阅读也是提升技能的好方法,通过查看`HashSet`和`TreeSet`的源码,可以更深入地了解它们的工作原理,这有助于优化代码并解决可能出现的问题。
为了优化removeAll方法的性能,可以使用迭代器遍历ArrayList中的元素,然后使用HashSet的contains方法判断该元素是否在另外一个集合中。如果在,则删除该元素。这种实现机制的时间复杂度为O(m),far less than O(m*n...
如果已有元素占据了这个位置,那么会调用equals()方法来判断新元素是否与已存在元素相等。如果equals()返回true,表示元素已经存在,HashSet就不会添加新的元素,从而保证了数据的唯一性。 源码分析是理解这些概念...