2

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

4 回答 4

4

您说的是 map ,其中所有数组列表都以字符串为键 - 但您将失去迭代顺序。或者,您可以将键存储在数组列表中,并将数组列表存储在地图中。

于 2012-10-21T09:03:43.390 回答
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"));
于 2012-10-21T09:10:12.787 回答
1

如果您需要“命名”您的 ArrayList,那么您真的想创建一个有意义的数据结构而不是使用 hacks。毕竟这是面向对象编程:

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 替换原则。另请参阅优先组合而不是继承

于 2012-10-21T09:17:43.797 回答
0

如果你的意思是参考你不能试试这个

ArrayList someIdentifierHumansCanRead = new ArrayList<String>();
ListOfLists.add(someIdentifierHumansCanRead)

或者,Map<String,List<String>>如果您想使用标识符检索数组列表,则可以使用。

map.put("id",new ArrayList<String>());

映射可以是 HashMap / LinkedHashMap / TreeMap 等。迭代顺序将取决于选择的实现。

于 2012-10-21T09:07:03.087 回答