在Java中有没有办法在ArrayList中命名一个ArrayList?

时间:2012-10-21 09:01:34

标签: java arraylist nested

当我需要一种在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>)

或者这只是完全荒谬的?

4 个答案:

答案 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等。迭代顺序取决于所选择的实现。