set 接口( HashSet)
基础
import java.util.HashSet; public class Demo02 { public static void main(String[] args) { //set接口 HashSet<String> set=new HashSet<String>(); set.add("abc"); set.add("abc"); set.add("bcd"); //遍历 for (String string : set) { System.out.println(string); } System.out.println("adc".hashCode());//hashCode算法 } }
自定义对象
//自定义类 package com.oracle.demo01; public class Person { private String name; private int age; public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } // 重写 hashCode() 方法 /*public int hashCode() { return name.hashCode()+age*31;//这是重点 }*/ // 重写 equals 方法 /*public boolean equals(Object obj) { if(obj==this){ return true; } if(obj==null){ return false; } if(obj instanceof Person){ Person p=(Person)obj; return p.name.equals(this.name)&&p.age==this.age; } return false; }*/ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } public Person() { super(); } public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
//测试类 package com.oracle.demo01; import java.util.HashSet; public class Demo03 { public static void main(String[] args) { //自定义类,别忘了重写hashCode()方法和equals()方法 HashSet<Person> set=new HashSet<Person>(); set.add(new Person("a",18)); set.add(new Person("b",17)); set.add(new Person("a",18)); for (Person person : set) { System.out.println(person); System.out.println(person.hashCode()); } } }
.