java day17 Set類的子類:HashSet類
阿新 • • 發佈:2018-12-14
Set集合,無索引,不可以重複,無序(存取不一致)
字串遍歷
HashSet<String> hs = new HashSet<>(); //建立HashSet物件 boolean b1 = hs.add("a"); boolean b2 = hs.add("a"); //當向set集合中儲存重複元素的時候返回為false hs.add("b"); hs.add("c"); hs.add("d"); System.out.println(hs); //HashSet的繼承體系中有重寫toString方法 System.out.println(b1); System.out.println(b2); for (String string : hs) { //只要能用迭代器迭代的,就可以使用增強for迴圈遍歷 System.out.println(string); }
HashSet如何保證元素唯一性
需要重寫hashCode方法和equal方法 重寫後,當他們的hashCode相同時,就呼叫equal()方法比較,false就存,true就不存
所以要保證hashCode返回的不一樣(相當於票號,如果是2個人就給2張不同的票號) Alt+shift+S h自動生成
/* * 為什麼是31? * 1,31是一個質數,質數是能被1和自己本身整除的數 * 2,31這個數既不大也不小 * 3,31這個數好算,2的五次方-1,2向左移動5位 */ @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; } public boolean equals(Object obj) { if (this == obj) //呼叫的物件和傳入的物件是同一個物件 return true; //直接返回true if (obj == null) //傳入的物件為null return false; //返回false if (getClass() != obj.getClass()) //判斷兩個物件對應的位元組碼檔案是否是同一個位元組碼 return false; //如果不是直接返回false Person other = (Person) obj; //向下轉型 if (age != other.age) //呼叫物件的年齡不等於傳入物件的年齡 return false; //返回false if (name == null) { //呼叫物件的姓名為null if (other.name != null) //傳入物件的姓名不為null return false; //返回false } else if (!name.equals(other.name)) //呼叫物件的姓名不等於傳入物件的姓名 return false; //返回false return true; //返回true }
ListedHashSet類
底層是連結串列實現的,是set集合中唯一一個能保證怎麼存就怎麼取的集合物件 因為是HashSet的子類,所以也是保證元素唯一的,與HashSet的原理一樣
TreeSet類
Test:將集合中的重複元素去掉
package com.heima.test; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; public class Test3 { /** * 需求:將集合中的重複元素去掉 * * 分析: * 1,建立List集合儲存若干個重複元素 * 2,單獨定義方法去除重複 * 3,列印一下List集合 */ public static void main(String[] args) { //1,建立List集合儲存若干個重複元素 ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("a"); list.add("a"); list.add("b"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("c"); list.add("c"); //2,單獨定義方法去除重複 getSingle(list); //3,列印一下List集合 System.out.println(list); } /* * 分析 * 去除List集合中的重複元素 * 1,建立一個LinkedHashSet集合 * 2,將List集合中所有的元素新增到LinkedHashSet集合 * 3,將list集合中的元素清除 * 4,將LinkedHashSet集合中的元素添加回List集合中 */ public static void getSingle(List<String> list) { //1,建立一個LinkedHashSet集合 LinkedHashSet<String> lhs = new LinkedHashSet<>(); //2,將List集合中所有的元素新增到LinkedHashSet集合 lhs.addAll(list); //3,將list集合中的元素清除 list.clear(); //4,將LinkedHashSet集合中的元素添加回List集合中 list.addAll(lhs); } }