【從小白開始學python系列九】數值運算(附水仙花案例)
阿新 • • 發佈:2022-02-11
hashset儲存依據
- (1)根據hashcode計算儲存的位置,如果此位置為空,則直接儲存,如果不為空執行第二步。
- (2)再執行equals方法,如果equals方法為true,則認為是重複,否則,形成連結串列
new關鍵字會新增元素,可以重寫equals方法和hashcode方法後可以避免
使用
package Collection.Set.Demo03; import java.util.HashSet; /** * hashset 的使用 * 儲存結構:雜湊表(陣列+單向連結串列+紅黑樹) * (1)根據hashcode計算儲存的位置,如果此位置為空,則直接儲存,如果不為空執行第二步。 * (2)再執行equals方法,如果equals方法為true,則認為是重複,否則,形成連結串列 * @author liu */ public class Demo01 { public static void main(String[] args) { //建立集合 HashSet<Person> persons = new HashSet<Person>(); //1,新增元素 Person s1 = new Person("劉", 20); Person s2 = new Person("關", 30); Person s3 = new Person("張", 40); persons.add(s1); persons.add(s2); persons.add(s3); //new關鍵字會新增,重寫equals方法和hashcode方法後可以避免 persons.add(new Person("劉",20)); System.out.println(persons); System.out.println(persons.size()); } }
person
package Collection.Set.Demo03; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { 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; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } @Override public int hashCode() { int n1 = this.name.hashCode(); int n2 = age; return n1 + n2; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (obj instanceof Person) { Person p = (Person) obj; if (this.name.equals(p.getName()) && this.age == p.getAge()) { return true; } } return false; } }