Serie: Angelia
java
46 líneas
· Actualizado 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;
}
}
Artículos relacionados
Angelia
haskell
EN
Actualizado 2026-02-03
Adding.hs
Adding.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Adding.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Area.hs
Area.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Area.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Chess.hs
Chess.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Chess.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
ChessGraphics.hs
ChessGraphics.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/ChessGraphics.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Examples.hs
Examples.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Examples.hs).
Leer artículo →
Angelia
haskell
EN
Actualizado 2026-02-03
Fibonacci.hs
Fibonacci.hs — haskell source code from the Angelia learning materials (Angelia/Haskell/Fibonacci.hs).
Leer artículo →