Java基础之集合框架--HashSet

来源:互联网 发布:mac pro忘记登录密码 编辑:程序博客网 时间:2024/05/21 19:47


import java.util.*;/*往hashSet集合中存入自定对象姓名和年龄相同为同一个人,重复元素。|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。HashSet是如何保证元素唯一性的呢?是通过元素的两个方法,hashCode和equals来完成。先调用hashCode方法如果元素的HashCode值相同,才会判断equals是否为true。如果元素的hashcode值不同,不会调用equals。注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。|--TreeSet:Set集合的功能和Collection是一致的。*/class HashSetTest {public static void sop(Object obj) {System.out.println(obj);}public static void main(String[] args) {HashSet<Person> hs = new HashSet<>();hs.add(new Person("a1", 11));hs.add(new Person("a2", 12));hs.add(new Person("a3", 13));// hs.add(new Person("a2",12));// hs.add(new Person("a4",14));// sop("a1:"+hs.contains(new Person("a2",12)));// hs.remove(new Person("a4",13));Iterator it = hs.iterator();while (it.hasNext()) {Person p = (Person) it.next();sop(p.getName() + "::" + p.getAge());}}}class Person {private String name;private int age;Person(String name, int age) {this.name = name;this.age = age;}public int hashCode() {//条件是什么就使用什么来构造哈希码System.out.println(this.name + "....hashCode");return name.hashCode() + age * 31;//随机给定值31}public boolean equals(Object obj) {//条件是什么就使用什么来重写equals方法        if(this==obj)        return true;if (!(obj instanceof Person))return false;Person p = (Person) obj;System.out.println(this.name + "...equals.." + p.name);return this.name.equals(p.name) && this.age == p.age;}public String getName() {return name;}public int getAge() {return age;}}