2012-12-07 13 views
0

我有一個非常簡單的Java類:如何在Java類中維護指向List的指針?

public class Party { 
    private List<String> hosts = new ArrayList<String>(); 
    private String headHost = null; 

    public void addHost(String name) { 
     hosts.add(name); 
     headHost = name; 
    } 
} 

但似乎有點傻,以保持一個String跟蹤列表的指針...

1.是否有保持一個更好的辦法跟蹤誰是「主持人」?

它不會永遠是添加的最後一個人,或者:

public void setHost(int i) { 
    headHost = hosts.get(i); // potentially throws an exception based on i 
} 

public void setHost(String name) { 
    headHost = name; 
} 

2.什麼是改變目前「主機頭」的最佳方式?這兩種方法都可能帶有不正確的參數。

+1

我認爲目前的版本是好的。只需將驗證添加到'setHost'方法。 –

+0

謝謝,這是一個在黑暗中拍攝的更緊湊的版本。 – sdasdadas

回答

2

當前版本就好了。如果您擔心異常,則可以對代碼應用一些防禦性編程:

public void setHost(int i) { 
    if(i < 0 || i > hosts.size()-1){ 
     throw new IllegalArgumentException("Index is out of range!"); 
    } 
    headHost = hosts.get(i); 
} 

public void setHost(String name) { 
    if(!hosts.contains(name){ 
     throw new IllegalArgumentException("The specified host does not exist."); 
    } 
    headHost = name; 
} 
1

List目前沒有的概念,至少在Java中沒有。如果您想知道第一個元素是什麼,只需使用List.get(0)

要獲取最後一個元素,請使用hosts.get(hosts.size()-1)

您可能也有興趣Stack類,它有LIFO(後進先出)的方法,使得它更容易得到最近輸入的元素。

如果由於某種原因,你希望能夠查找一個host通過String name,不使用List,使用Map(最好是HashMap

+0

謝謝 - 我明白如何在特定時間訪問列表,我主要是在尋找某種類型的指針來陪伴列表。 – sdasdadas

+0

您是否正在編寫一個新的類,如'class ListWithPointer implements Lists '? – durron597

+0

我不打算去看,因爲它看起來像是過度殺傷,但這基本上是這個想法。 – sdasdadas

1

您所在的區域已經只是一個指針。字符串是java中的一個對象。

當你這樣做:

public void addHost(String name) { 
    hosts.add(name); 
    headHost = name; 
} 

只有一個字符串以兩個指向它,在列表中的一個指針,一個在你的實例變量headHost。沒有兩個實際數據的副本。