標籤:sed int 找不到 stat for set hash nbsp 技術分享
1 package com.tn.hashSet; 2 3 public class Person { 4 private int id; 5 private String name; 6 private String birthday; 7 public Person(int id, String name, String birthday) { 8 super(); 9 this.id = id;10 this.name = name;11 this.birthday=birthday;12 }13 public int getId() {14 return id;15 }16 public void setId(int id) {17 this.id = id;18 }19 public String getName() {20 return name;21 }22 public void setName(String name) {23 this.name = name;24 }25 public String getBirthday() {26 return birthday;27 }28 public void setBirthday(String birthday) {29 this.birthday = birthday;30 }31 @Override32 public String toString() {33 return id +"-" + name;34 }35 @Override36 public int hashCode() {37 final int prime = 31;38 int result = 1;39 result = prime * result + id;40 return result;41 }42 @Override43 public boolean equals(Object obj) {44 if (this == obj)45 return true;46 if (obj == null)47 return false;48 if (getClass() != obj.getClass())49 return false;50 Person other = (Person) obj;51 if (id != other.id)52 return false;53 return true;54 }55 }Person.java
1 package com.tn.hashSet; 2 3 import java.util.HashSet; 4 import java.util.Iterator; 5 6 public class HashSetTest { 7 /* 8 * HashSet的底層是HashMap 9 * 注意:10 * 1.必鬚根據實際情況確定唯一標識來重寫hashCode和equals方法11 * 2.對象一旦放入HashSet容器中,則唯一標識不能再修改,否則移除不了。12 * 3.HashSet存放對象時對象位置和對象hashCode演算法等到的值相關,尋找移除都需要用到hashCode演算法13 * 值,如果唯一標識被修改則hashCode演算法值會和以前不一樣,對象位置就改變了,導致找不到對象,長此以往,14 * 導致記憶體泄露。15 */16 public static void main(String[] args){17 HashSet<Person> persons=new HashSet<Person>();18 Person p1=new Person(1001,"張三","1990-1-1");19 Person p2=new Person(1002,"李四","1988-2-2");20 Person p3=new Person(1003,"王五","1989-3-3");21 persons.add(p1);22 persons.add(p2);23 persons.add(p3);24 25 System.out.println(persons);//即列印容器中每個對象toString的傳回值26 27 //foreach遍曆28 for(Person p:persons)29 System.out.println(p);30 31 //迭代器遍曆32 Iterator<Person> iterator=persons.iterator();33 while(iterator.hasNext())34 System.out.println(iterator.next());35 36 /*不能用for遍曆,因為HaseSet無get方法。37 for(int i=0;i<persons.size();i++){38 System.out.println(persons.get(i));39 }*/40 41 //HashSet不能加重複對象42 System.out.println(persons.size());43 persons.add(p3);44 System.out.println(persons.size());45 46 /*47 * 若不重寫Person的hashCode和equals方法p4和p3會因地址不同被Object的equals方法判斷為48 * 兩個不同的對象,若重寫hashCode和equals,則被會認為同一個對象。49 */50 Person p4=new Person(1003,"王五","1989-3-3");51 52 persons.add(p4);53 System.out.println(persons.size());//不重寫hashCode和equals列印4,重寫列印354 55 boolean b;56 b=persons.remove(p1);57 System.out.println(b);58 System.out.println(persons.size());59 p2.setId(1000);//HashSet容器中的對象唯一標識被改,導致hashCode和equals演算法值和以前不一樣60 b=persons.remove(p2);//移除失敗直接返回false,程式不會報錯。61 System.out.println(b);62 System.out.println(persons.size());63 } 64 }HashSetTest.java
【java】HashSet