集合之HashSet
来源:互联网 发布:百度人工智能识别卡 编辑:程序博客网 时间:2024/06/05 04:04
1.Set中元素是无序的
情景0
情景1
情景2
情景3
HashSet set=new HashSet();set.add("a");set.add("b");set.add("c");set.add("d");System.out.println(set);//结果:[d,b,c,a]2.Set不允许重复
情景0
HashSet set=new HashSet();System.out.println(set.add("a"));//结果:trueset.add("b");set.add("c");set.add("d");System.out.println(set.add("a"));//结果:false两次添加"a"
情景1
HashSet set=new HashSet();System.out.println(set.add(new People("张三")));//trueSystem.out.println(set.add(new People("张三")));//true两次分别添加不同的对象。
情景2
HashSet set=new HashSet();People p1=new People("张三");System.out.println(set.add(p1));//trueSystem.out.println(set.add(p1));//false两次都是添加p1
情景3
HashSet set=new HashSet();String s1=new String("a");String s2=new String("a");System.out.println(set.add(s1));//trueSystem.out.println(set.add(s2));//false
两次分别添加s1,s2(显然,s1和s2是不同的对象)。
注意:此时第二次添加并不成功。
HashSet添加元素的过程
①HashCode
当HashSet在添加元素时,会先调用hashCode()方法,判断即将加入的元素的hashCode是否与集合中的元素有相同的,如果没有,则允许添加该元素。如果有相同的,则继续调用equals()方法,如果equals()方法返回true,则表示对象已经加入过了,不允许再添加了。否则,如果equels方法返回false,则允许添加新元素。
②equals
对于两个对象来说,如果使用equals返回true, 则这两个对象的hashcode一定相同。
对于两个对象来说,如果使用equals返回false,则这两个对象的hashcode不一定不相同(可以相同或者不同)。如果不同,可以提高性能。
对于Object类来说,不同的Object对象的hashcode值是不同的(hashCode值表示对象的地址)
String类的hashCode()方法重写了Object类的hashCode()方法,只要两个String对象的内容相同则认为hashCode相同,所以情景3比较特殊。
0 0
- Set集合之HashSet
- 集合之HashSet
- Java集合之HashSet
- java集合之HashSet
- 集合之HashSet
- 集合之HashSet
- Java集合之HashSet
- 集合之HashSet
- Java集合之HashSet
- Java集合之HashSet
- 集合之浅谈HashSet
- java 之 集合(hashSet)示例
- 集合之HashSet/TreeSet原理
- 集合之HashSet用法一
- java集合框架之HashSet
- 集合之HashSet/TreeSet原理
- Java集合之Set(HashSet)
- API集合框架-Set集合之HashSet
- 刚用eclipse发现用点点不出方法和对象
- HDU 5074 Hatsune Miku [dp] ——2014鞍山现场赛E题
- python 模块使用
- 关于jquery设置select中option值
- Eclipse点不出方法
- 集合之HashSet
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式+抽象工厂模式)
- 【转】Bigtable:一个分布式的结构化数据存储系统
- 关于js的break不能跳出多重循环的解决方法。
- Acmer 加油,贪心吗
- hadoop集群所有的datanode都启动不利(处理办法)
- 请慎用 java 的 File#renameTo(File) 方法
- Microsoft SQL Server 管理 (常用管理及维护命令)
- 输出Lucence的分词信息