0

我需要创建一个 Hallway 类,其中包含 2ArrayLists个 Stand 对象,一个用于右侧的支架,另一个用于左侧的支架。

我的意图是将这些ArrayLists放在这个类的另一个集合中。

我不知道我是否应该使用哈希表、地图等。

更重要的是,我的意图是使用以下方法访问这些 ArrayList:

TheHashTable["Right"].add(standObject); // 在 Hashtable 内的 Right Stands ArrayList 中添加一个 Stand。

例子:

   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

这是可能的,但我建议不要这样做。如果您只有两个展台位置,那么简单地拥有两个类型的变量会更加清晰List<Stand>leftStandsrightStands,并具有相应的方法: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);
}

但更好的方法是使用Map而不是Hashtable

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、...)映射到单个键(例如“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 回答