0

我有一个非常简单的 Java 类:

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

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

但是维护一个跟踪列表指针的字符串似乎有点愚蠢......

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. 改变当前的“头部宿主”最好的方法是什么?这两种方法都可能采用不正确的参数。

4

3 回答 3

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;
}
于 2012-12-07T23:36:09.107 回答
1

List 没有 current 的概念,至少在 Java 中没有。如果您想知道第一个元素是什么,只需使用List.get(0)

要获取最后一个元素,请使用hosts.get(hosts.size()-1).

您可能还对该类感兴趣,Stack该类具有LIFO(后进先出)方法,可以更轻松地获取最近输入的元素。

如果出于某种原因您希望能够查找 a hostby String name,请不要使用 a List,使用 a Map(最好是 a HashMap

于 2012-12-07T23:32:47.243 回答
1

您所在的区域已经只持有一个指针。字符串是java中的对象。

当你这样做时:

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

只有一个字符串带有两个指向它的指针,一个在列表中,一个在实例变量 headHost 中。实际数据没有两个副本。

于 2012-12-07T23:39:34.043 回答