2012-12-07 108 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。没有两个实际数据的副本。