0

ArrayLists内側に 2 つの Stand オブジェクト (1 つは右側のスタンド用、もう 1 つは左側のスタンド用)を持つ Hallway クラスを作成する必要があります。

私の意図は、これらArrayListsをこのクラスの別のコレクションに入れることです。

Hashtable や Map などを使用する必要があるかどうかわかりません。

さらに重要なことは、次のようなメソッドを使用してこれらの ArrayLists にアクセスすることです。

TheHashTable["右"].add(standObject); // Hashtable 内にある Right Stands ArrayList にスタンドを追加します。

例:

   public class Hallway {       

      private Hashtable< String, ArrayList<<Stand> > stands;

      Hallway(){
         // Create 2 ArrayList<Stand>)
         this.stands.put("Right", RightStands);
         this.stands.put("Left", LeftStands);
      }      

      public void addStand(Stand s){
         this.stands["Right"].add(s);
      }
}

これは可能でしょうか?

4

5 に答える 5

3

可能ですが、お勧めしません。スタンドの場所が 2 つしかない場合は、型List<Stand>:leftStandsとの 2 つの変数を単純rightStandsに持ち、対応するメソッド: addLeftStand(Stand)addRightStand(Stand)などを使用する方がはるかに明確になります。コードはより明確でシンプルで安全になります。

本当に自分の思い通りにしたいのであれば、マップのキーを文字列にするべきではありません。呼び出し元は、メソッドにどのキーを渡すかを知りません (文字列は無数にあります)。また、キーが「右」と「左」であることを知っていたとしても、タイプミスを犯す可能性があります。コンパイラ。代わりに列挙型を使用する必要があります。これにより、コードが自己文書化され、より安全になります。

public enum Location {
    LEFT, RIGHT
}

private Map<Location, List<Stand>> stands = new HashMap<Location, List<Stand>>();

public Hallway() {
    for (Location location : Location.values()) {
        stands.put(location, new ArrayList<Stand>());
    }
}

public void addStand(Location location, Stand stand) {
    stands.get(location).add(stand);
}
于 2013-04-23T15:53:11.733 に答える
2

左右しかない場合は、たとえば 2 つの配列リストを作成できます。

private ArrayList<Stand> rightStands;
private ArrayList<Stand> leftStands;
于 2013-04-23T15:50:27.170 に答える
1

私があなたの質問を明確に理解していれば、これはあなたが望むものです:

public void addStand(Stand s){
 this.stand.get("Right").add(s);
}

しかし、より良いアプローチは、 Hashtableの代わりにMapを使用することです。

public class Hallway {

 private Map< String, ArrayList<<Stand> > stands;
 private List<Stand> RightStands;
 private List<Stand> LeftStands;

 Hallway(){
    stands = new HashMap();
    RightStands = new ArrayList();
    LeftStands = new ArrayList();
    this.stands.put("Right", RightStands);
    this.stands.put("Left", LeftStands);
  }      

  public void addStand(Stand s){
     this.stands.get("Right").add(s);
  }
}
于 2013-04-23T15:48:39.360 に答える
0

ハッシュテーブルを使用しないでください。それはずっと前に廃止されました。TreeMap または HashMap を使用します。

List<Stand> right=new ArrayList<Stand>(),left=new ArrayList<Stand>();
Map<String,List<Stand> > stands= new HashMap<String, List<Stand> >();
stands.put("right",right);
stands.put("left",left);

マップについて学び、どのマップが自分に最も適しているかを判断するには、Precisely Concise: Java Mapsをお読みください。

于 2014-05-20T11:08:22.920 に答える
0

Commons CollectionsGuavaなどのマルチマップが必要です。

これらを使用すると、複数の値 (Stand1、Stand2、...) を 1 つのキー (「right」など) にマップできます。

例 (Commons Collections の場合):

MultiMap stands = new MultiHashMap();
stands.put("left", new Stand());
stands.put("left", new Stand());
stands.put("right", new Stand());
stands.put("right", new Stand());
stands.put("right", new Stand());
Collection standsOnLeftSide = (Collection) stands.get("left");

ジェネリックに対応しているのでGuavaの方がいいと思います。

于 2013-04-23T15:52:03.303 に答える