標籤:分享圖片 建立 info png 位置 object cal 對象 自己的
、
Hashset集合是set介面的子類
底層是一個雜湊表,不能儲存重複的元素,通過hashcode方法和equals方法來保證資料的唯一性。取出資料時,不能保證資料的順序和存入資料的順序一致
hashcode方法用來比較2個元素的雜湊值,如果雜湊值一樣,就調用equals方法,比較元素的內容是否一樣
什麼是雜湊表呢?
雜湊表底層使用的也是數組機制,數組中也存放對象,而這些對象往數組中存放時的位置比較特殊,當需要把這些對象給數組中存放時,那麼會根據這些對象的特有資料結合相應的演算法,計算出這個對象在數組中的位置,然後把這個對象存放在數組中。而這樣的數組就稱為雜湊數組,即就是雜湊表。
當雜湊值一樣的時候,內容不一樣的時候就會儲存在同雜湊值鏈表的下面。
1 public static void method01(){2 HashSet<String> set =new HashSet<String>();3 set.add("abc");4 set.add("abc");5 System.out.println(set);6 }
HashSet儲存自訂元素
給HashSet中存放自訂類型元素時,需要重寫對象中的hashCode和equals方法,建立自己的比較方式,才能保證HashSet集合中的對象唯一
1 public static void method03(){2 HashSet<Person> set =new HashSet<Person>();3 set.add(new Person("a",20));4 set.add(new Person("b",30));5 set.add(new Person("c",40));6 for(Iterator it =set.iterator();it.hasNext();){7 System.out.println(it.next());8 }9 }
1 package com.orcale.demo01; 2 3 public class Person { 4 private String name; 5 private int age; 6 public Person(){}; 7 public Person(String name, int age) { 8 this.name = name; 9 this.age = age;10 }11 public String getName() {12 return name;13 }14 public void setName(String name) {15 this.name = name;16 }17 public int getAge() {18 return age;19 }20 public void setAge(int age) {21 this.age = age;22 }23 public String toString() {24 return "Person [name=" + name + ", age=" + age + "]";25 }26 public boolean equals(Object obj) { //重寫equals方法,先判斷這2個的值是否一樣,再判斷這個值是不是空的,
如果都不是就判斷這個值是不是Person類,因為是obj類父類,所有要向下轉型,然後判斷值是否一樣27 if(this==obj){28 return true;29 }30 if(obj==null){31 return false;32 }33 if(obj instanceof Person){34 Person p=(Person) obj;35 return name.equals(p.name)&&age==p.age;36 }37 return false;38 }39 40 public int hashCode() {41 final int prime = 31;42 int result = 1;43 result = prime * result + age;44 result = prime * result + ((name == null) ? 0 : name.hashCode());45 return result;46 }47 }
LinkedHashSet集合是HashSet集合的子類,他取出資料的順序和存入資料的順序是一致的,資料也是唯一性
1 public static void method05(){2 LinkedHashSet<Integer> set=new LinkedHashSet<Integer>();3 set.add(1);4 set.add(2);5 set.add(3);6 for(Integer i:set){7 System.out.println(i);8 }9 }
java set介面