新增一個 HashSetTest 主程式
宣告參考變數使用介面,方便將來更換不同的集合,讓程式將來修改時更容易;
例如,LinkedList 也實作了 List 介面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | import java.util.*; //java.unti套件裡所有的類別 public class HashSetTest { public static void main(String[] args) { Animal a=new Dog(); a.setName("小白"); Animal b=new Cat(); b.setName("小花"); Animal c=new Bird(); c.setName("小飛"); Animal d=new Dog(); d.setName("小白"); //List介面,有順序姓,可重複 List<Animal> list=new ArrayList<>(); //隨時可以將ArrayList更換為其他實作介面,只要是List有的 /* 宣告 參考變數(list) 使用 介面(List)而不是使用ArrayList,方便將來更換不同的集合,讓程式將來修改時更容易 List介面可實作的類別很多,ArrayList是其中一個,之後如果修改,可以將ArrayList修改為LinkedList 下面的程式碼都不需要異動 List<Animal>指泛型,只要是Animal類別的都可以加入 */ list.add(a); list.add(b); list.add(c); list.add(d); //Set介面,無順序姓,不重複 Set set=new HashSet(); //同List說明 set.add(a); set.add(b); set.add(c); set.add(d); /* 若Animal沒有覆寫equals,set集合會出現兩個Dog小白 因為 Object 的 equals() 使用 == 判斷相等,只有是同一個物件的情況下才會相等 所以當沒有覆寫equals時,是兩個不同的Dog小白 */ System.out.println(list); System.out.println(set); //若要出現的訊息不是顯示雜訊碼,需要再Animal加入toString } } |
修改 Animal 的 toString(),使其文字顯示為 物件類別.物件名稱=指定的名字
@Override public String toString() { return this.getClass().getName() + "{name=" + name + '}'; //顯示 物件類別.物件名稱=指定的名字 }
顯示結果如下
如果 Animal 沒有覆寫 equals(),Set 集合會出現兩個 Dog小白
因為 Object 的 equals() 使用 == 判斷相等,只有同一個物件的情況下才會相等 ( 現在是兩個不同的小白物件 )
************************************************************************************
HashSet使用雜湊碼可以提高搜尋效率
************************************************************************************
Set 的應用
增加一個水果字串,並且使用HashSet(),將水果字串放入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import java.util.*; //Set的應用 public class HashSeDemo { public static void main(String[] args) { String[] fruit = {"蘋果", "香蕉", "鳳梨", "芭樂", "蘋果", "香蕉"};//建立一組水果字串 Set set = new HashSet();//建立物件 for (String s : fruit) { //將水果字串一個一個放入迴圈中判斷 set.add(s); //將水果放入set中,刪除重複 } System.out.println("一共有"+set.size()+"種水果"); System.out.println(set);//列出水果 } } |
code
Animal
HashSetTest
HashSetDemo
沒有留言:
張貼留言