此为历史版本和 IPFS 入口查阅区,回到作品页
MartinYeung
IPFS 指纹 这是什么

作品指纹

Java – Set 的介紹及應用

MartinYeung
·
·

閱讀時間: 10分鐘

Set是一個Interface。

有最簡單的Collection資料結構 - 集合。

Set 唯一的限制是不允許重覆的物件存在。

所以當你不想有相同的物件出現,就可以選擇用Set,同時選擇合適的實作。

Set常用的實作主要有3個:

• LinkedHashSet

保證裡面元素存放的順序與新增時相同。最適合拿來存放由資料庫中存取的資料集。

• HashSet

讀取特快,但不保證存放元素的順序。

• TreeSet

依物件大小來決定集合裡面的順序。所以存放於TreeSet中元素必需是(實作) Comparable的物件。有時候當從自料庫中存取的資料必需自行排序時,就會用到。

例子解釋:

檢查字串(String)有多少個單字不重複。

import java.util.*;

/*英文字數計算*/
public class EnglishWordCount {
    public static void main(String[] args) {
        String line = input("請輸入一段英文:");
        Set<String> words = tokens(line);
        System.out.printf("結果: 沒有重複的單字有%d個 = %s%n",
                words.size(), words);
    }
	/*英文文字輸入*/static String input(String prompt) {
        System.out.print(prompt);
        Scanner scanner = new Scanner(System.in);
        String line = scanner.nextLine();
        return line;
    }
    
    /*切割文字,實作使用LinkedHashSet儲存 */
static Set<String> tokens(String line) {
        String[] tokens = line.split(" ");
        Set<String> words = new LinkedHashSet <>();
        for(String token : tokens) {
            words.add(token);
        }
        return words;
    }
}

程式詳解:

首先由於String line = input("請輸入一段英文:");,所以會直接跑Method input(),而在input()內,會直接輸出那段文字 “請輸入一段英文:”,之後就要求你輸入一段交字。而你所輸入的文字會儲存在一個類型為String 名字是line內。

然而下一句code是Set words = tokens(line);,

這表剛剛輸入的文字會被轉移存在另一個變數”words”,而words是一個Set,可以不允許重覆的物件存在。

而在轉到”words”之前,其實它已經觸動到Method tokens(),所以會去跑token()。

在token()內,那段文字會先被split(切割),以”空白”來區分每個英文文字,之後再儲存在一個名為tokens的String array。

再說明一下,由於Set只是interface,所以必須實作,而這次是實作LinkedHashSet。

主要目的是保證裡面元素存放的順序與新增時相同。

接著透過for loop將token array的資料轉移到words,最後return words(即是最後結果)出去。

結果是什麼 ?

大家可以自行複雜上面的代碼去測試一下。

另外,3個set的實作都有不同功能,你可以根據你的實際需要而作出最佳選擇。

CC BY-NC-ND 2.0 授权