2015年7月31日 星期五

Java上課練習:Object類別與集合_ArrayList 與 HashSet 集合

ArrayList 與 HashSet 集合

新增一個 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

    }

}

修改 AnimaltoString(),使其文字顯示為 物件類別.物件名稱=指定的名字
    @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

沒有留言:

張貼留言