S SmartDocs
시리즈: Angelia java 46 줄 · 업데이트 2026-09-27

GuestArrayUniqueList.java

Angelia/Java/Week_6_7/code/05_junit_tdd/GuestArrayUniqueList.java

/**
 * 實作二:「嚴格」(strict)的陣列版——用繼承重用 GuestArrayList 的程式碼。
 *
 * add 先檢查 isComing,已經在名單上就直接 return,因此多了一條更強的資料不變量:
 *   data[0..used-1] 中所有非 null 的名字互不相同。
 *
 * 有了這條不變量,remove 找到第一個就可以停(不必掃完整個陣列),
 * count 也不必再檢查重複。
 *
 * 對外行為(介面契約)與 GuestArrayList 完全一致 → 這是 LSP 合規的子型別。
 */
public class GuestArrayUniqueList extends GuestArrayList {

    @Override
    public void add(String name) {
        if (isComing(name)) {
            return;                   // 已經在名單上:什麼都不做
        }
        super.add(name);              // 其餘邏輯(含陣列倍增)跟父類別一樣,直接重用
    }

    @Override
    public void remove(String name) {
        int i = 0;
        while (i < this.used) {
            if (this.data[i] != null && this.data[i].equals(name)) {
                this.data[i] = null;
                return;               // 不變量保證最多一個:找到就可以停
            }
            i = i + 1;
        }
    }

    @Override
    public int count() {
        int n = 0;
        int i = 0;
        while (i < this.used) {
            if (this.data[i] != null) {   // 不必再檢查重複
                n = n + 1;
            }
            i = i + 1;
        }
        return n;
    }
}

관련 글