当我需要一种在ArrayList中轻松识别ArrayList的方法时,我只需在0索引中放置一个标识符,然后用循环打印出所有零索引。 现在我想知道是否有办法使嵌套的ArrayLists具有名称。
例如:
ListOfLists.add( new ArrayList<String>() );
ListOfLists.get(ListOfLists.size() -1).add("someIdentifierHumansCanRead");
会有一些方法让ListOfLists.add(new ArrayList<String>())
成为
ListOfLists.add(ArrayList someIdentifierHumansCanRead = new ArrayList<String>)
?
或者这只是完全荒谬的?
答案 0 :(得分:4)
您所说的是地图,其中所有数组列表都按字符串键入 - 但您将失去迭代顺序。或者,您可以将键存储在数组列表和数组列表中。
答案 1 :(得分:1)
实现您自己的ArrayList
类并为其定义标识符属性:
class NamedList<T> extends ArrayList
{
private String name;
public NamedList(String name) {
this.name = name;
}
// Getters/Setters and other stuff for identifier, etc.
}
ArrayList<NamedList<String>> superList = new ArrayList<NamedList<String>>();
superList.add(new NamedList<String>("babangida"));
答案 2 :(得分:1)
如果您需要“命名”您的ArrayList,那么您真的想要创建一个有意义的数据结构而不是使用hacks。毕竟这是OO编程:
public void MyNamedBean {
private String name;
private final List<String> list = new ArrayList<String>();
public MyNamedBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
// If you don't need to change the name, make the field
// final and remove this method.
public void setName(String name) {
this.name = name;
}
// It should have a more meaningful name.
public List<String> getList() {
return list;
}
}
根据我对另一个答案的评论更新:这是一个OO设计问题。如果它是一个带有名称的列表,它不是只是一个列表,这意味着你不应该直接扩展List实现,而是创建一个有意义的类。如果您在某些时候需要第二个列表或另一个“名称”(例如,人类可读的标签),该怎么办?您可以在Liskov substitution principle上阅读何时使用继承以及何时使用合成。另请参阅Prefer composition over inheritance。
答案 3 :(得分:0)
如果你的意思是你不能尝试这个
ArrayList someIdentifierHumansCanRead = new ArrayList<String>();
ListOfLists.add(someIdentifierHumansCanRead)
如果您想使用标识符检索arraylist,也可以使用Map<String,List<String>>
。
map.put("id",new ArrayList<String>());
地图可以是HashMap / LinkedHashMap / TreeMap等。迭代顺序取决于所选择的实现。