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 少なくとも Java では、current の概念がありません。最初の要素が何であるかを知りたい場合は、単に使用してくださいList.get(0)

最後の要素を取得するには、 を使用しますhosts.get(hosts.size()-1)

また、最後に入力された要素をさらに簡単に取得できるようにするLIFOStack (後入れ先出し) メソッドを備えたクラスにも興味があるかもしれません。

何らかの理由で a hostbyを検索できるようにしたい場合は、 aを使用String nameせずに(できれば a )を使用してください。ListMapHashMap

于 2012-12-07T23:32:47.243 に答える
1

あなたはすでにポインタだけを持っています。String は Java のオブジェクトです。

これを行う場合:

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

それへの 2 つのポインターを持つ文字列は 1 つだけです。1 つのポインターはリストにあり、もう 1 つはインスタンス変数 headHost にあります。実際のデータの 2 つのコピーはありません。

于 2012-12-07T23:39:34.043 に答える