【java】HashSet

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.