你的意思是這樣嗎?
public class Lexicon {
class State {
public long count = 0;
public long stateNo;
public Set<Arc> arcs;
}
class Arc {
public char character;
public State destState;
public Set<String> letters;
}
Set<State> states = new HashSet<State>();
public void update(long stateNo, char character, String letter) {
for (State state : states) {
if(state.stateNo == stateNo) {
for (Arc arc : state.arcs) {
if (arc.character == character) {
arc.letters.add(letter);
break;
}
}
break;
}
}
}
}
如果是這樣,你最好使用地圖收藏改寫:
public class Lexicon {
class State {
public long count = 0;
public long stateNo;
public Map<Character, Arc> arcs;
public void updateArc(char character, String letter) {
Arc arc = arcs.get(character);
if (arc != null) {
arc.letters.add(letter);
}
}
}
class Arc {
public char character;
public State destState;
public Set<String> letters;
}
Map<Long, State> states = new HashMap<Long, State>();
public void update(long stateNo, char character, String letter) {
State state = states.get(stateNo);
if (state != null) {
state.updateArc(character, letter);
}
}
}
當然這只是草案,你搖頭初始化所有集合。 也爲了清晰起見,所有字段都聲明爲公開。
你有沒有參考你需要更新的狀態? – 2013-03-07 10:36:24
stateno可以識別正確的狀態,count是保持stateNo不唯一的靜態變量。 – 2013-03-07 10:57:27
在這種情況下,我同意推薦使用Map的答案。更具體地說,你應該有一個地圖,你可以使用它來找到一個狀態給定其狀態。同樣,你需要決定如何找到你想改變的弧,給定一個國家。 –
2013-03-07 11:01:21