Java学习之集合(HashSet)

Wesley13
• 阅读 665

HashSet的实例

 1 import java.util.HashSet;
 2 import java.util.Iterator;
 3 
 4 public class HashSetDemo {
 5 
 6     public static void main(String[] args) {
 7     HashSet hs = new HashSet();
 8     hs.add("heihei");
 9     hs.add("hehe");
10     hs.add("hahha");
11     hs.add("xixi");
12     hs.add("hehe");
13     hs.add("hahha");
14     hs.add("xixi");
15 
16     Iterator it = hs.iterator();
17 
18     while (it.hasNext()) {
19         System.out.println(it.next());
20     }
21     }
22 }

结果:

Java学习之集合(HashSet)

从结果发现HashSet不会由值重复,那就要判断其元素是否相同

判断的原理:

  判断两个元素的哈希值是否相同

    如果哈希值相同就判断两个元素的内容是否相同

    如果哈希值不同就不判断两个元素的内容

代码描述:就是判断HashSet中的元素的hashCode和equals方法。

HashSet元素为自定义类型,验证代码:

①、元素类型

 1 public class Person {
 2 
 3     private String name;
 4     private int age;
 5 
 6     public Person() {
 7     super();
 8     }
 9 
10     public Person(String name, int age) {
11     super();
12     this.name = name;
13     this.age = age;
14     }
15 
16     public String getName() {
17     return name;
18     }
19 
20     public void setName(String name) {
21     this.name = name;
22     }
23 
24     public int getAge() {
25     return age;
26     }
27 
28     public void setAge(int age) {
29     this.age = age;
30     }
31 
32     @Override
33     public int hashCode() {
34     System.out.println(this + ":-------hashCode");
35     return this.name.hashCode() + this.age;
36     }
37 
38     @Override
39     public boolean equals(Object obj) {
40     System.out.println(this + ":-------equals-------" + obj);
41     if (!(obj instanceof Person))
42         throw new ClassCastException("类型不对");
43     Person person = (Person) obj;
44     return this.name.equals(person.name) && person.age == this.age;
45     }
46 
47     @Override
48     public String toString() {
49 
50     return this.name + ":" + this.age;
51     }
52 }

②、HashSet存储

 1 import java.util.HashSet;
 2 import java.util.Iterator;
 3 
 4 import cn.marw.common.bean.Person;
 5 
 6 public class HashSetTest {
 7 
 8     public static void main(String[] args) {
 9     HashSet hs = new HashSet();
10 
11     hs.add(new Person("wang1", 31));
12     hs.add(new Person("wang2", 32));
13     hs.add(new Person("wang3", 33));
14     hs.add(new Person("wang4", 34));
15     hs.add(new Person("wang2", 32));
16     Iterator it = hs.iterator();
17     while (it.hasNext()) {
18         Person p = (Person) it.next();
19         System.out.println(p.getName() + ":" + p.getAge());
20 
21     }
22     }
23 }

結果:

Java学习之集合(HashSet)

总结:

HastSet判断集合元素是否相同,就是看元素的hashCode和equals方法

HastSet的方法contains和remove都要看元素的hashCode和equals方法

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
Java中多个集合的交集,并集和差集
一、交集  java中交集使用A.retainAll(B),交集的结果在集合A中。1importorg.junit.Test;23importjava.util.HashSet;4importjava.util.Set;56/7交集
Wesley13 Wesley13
3年前
Java入门第五篇:Java集合框架的Collection、List、Set、Map接口
【java的集合框架】 Collection:      1.List        ①ArrayList        ②LinkedList      2.set        ①HashSet        ②LinkedHashSet        ③TreeSetMap:       1.HashMap 
Wesley13 Wesley13
3年前
Java爬虫之JSoup使用教程
title:Java爬虫之JSoup使用教程date:201812248:00:000800update:201812248:00:000800author:mecover:https://imgblog.csdnimg.cn/20181224144920712(https://www.oschin
Wesley13 Wesley13
3年前
Java 集合线程安全
线程不安全的的集合有(HashSet,TreeSet,ArrayList,ArrayDeque,LinkedList,HashMap,TreeMap);线程安全的集合有(Vector,HashTable);Java(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Flib.csd
Wesley13 Wesley13
3年前
Java HashSet集合的子类LinkedHashSet集合
说明HashSet保证元素的唯一性,可是元素存放进去是没有顺序的。在HashSet下面有一个子类java.util.LinkedHashSet,它是链表哈希表(数组链表或者数组红黑树)组合的一个数据结构。即相对HashSet而言,多了一个链表结构。多了的那条链表,用来记录元素的存储顺序,保证元素有序举例Hash
Wesley13 Wesley13
3年前
Java 集合系列
HashSet介绍HashSet是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用null元素。HashSet是非同步的。如果多个线程同时访问一个哈希set,而其中至少一个线程修改了该set,那么它必须保持外部同步。HashSet数据结构java.lang
Wesley13 Wesley13
3年前
JavaSE_坚持读源码_HashSet对象_Java1.7
对于HashSet而言,它是基于HashMap实现的,HashSet底层采用HashMap来保存所有元素,因此HashSet的实现比较简单,查看HashSet的源代码,可以看到如下代码:1packagejava.util;23publicclassHashSet<E
Stella981 Stella981
3年前
Redis
Redis集合包括Set(无序集合)和ZSet(有序集合),这里的Set实现相当于Java中的HashSet,它内部实现了一个特殊的字典,字典中所有的value都是一个值NULL。下面我们来熟悉下set的常用的命令Setsadd namehelloZSetzset是一个有序集合,他有着java里的Sor