繁体   English   中英

在Java中,是否可以在ArrayList中命名ArrayList?

[英]In Java is there a way to name an ArrayList inside the ArrayList?

当我需要一种轻松识别ArrayList中的ArrayList的方法时,我只需将标识符放在0索引中,然后用循环打印出所有零索引。 现在,我想知道是否有办法使嵌套的ArrayList具有名称。

例如:

ListOfLists.add( new ArrayList<String>() );
ListOfLists.get(ListOfLists.size() -1).add("someIdentifierHumansCanRead");

有什么办法可以使ListOfLists.add(new ArrayList<String>())成为ListOfLists.add(ArrayList someIdentifierHumansCanRead = new ArrayList<String>)吗?

还是这完全是荒谬的?

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

实现您自己的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"));

如果您需要“命名” ArrayList,那么您真的想创建一个有意义的数据结构而不是使用hack。 毕竟,这是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替换原理 另请参见优先于继承而不是继承

如果您的意思是引用,则无法尝试此操作

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

或者Map<String,List<String>>如果要使用标识符检索Map<String,List<String>>可以使用Map<String,List<String>>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM