在Java中,有没有一种方法可以在ArrayList中命名ArrayList?

在Java中,有没有一种方法可以在ArrayList中命名ArrayList?,java,arraylist,nested,Java,Arraylist,Nested,当我需要一种在ArrayList中轻松识别ArrayList的方法时,我只需要在0索引中放入一个标识符,然后用循环打印出所有的零索引。 现在我想知道是否有办法使嵌套的ArrayList具有名称 例如: ListOfLists.add( new ArrayList<String>() ); ListOfLists.get(ListOfLists.size() -1).add("someIdentifierHumansCanRead"); 添加(新的ArrayList()); get(

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

例如:

ListOfLists.add( new ArrayList<String>() );
ListOfLists.get(ListOfLists.size() -1).add("someIdentifierHumansCanRead");
添加(新的ArrayList()); get(ListOfLists.size()-1).add(“someIdentifierHumansCanRead”); 是否有某种方法可以使
ListOfLists.add(newarraylist())
be 添加(ArrayList someIdentifierHumansCanRead=new ArrayList)


或者这是完全荒谬的吗?

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

如果你指的是推荐信,你就不能试试这个

ArrayList someIdentifierHumansCanRead = new ArrayList<String>();
ListOfLists.add(someIdentifierHumansCanRead)
ArrayList someIdentifierHumansCanRead=new ArrayList();
添加(someIdentifierHumansCanRead)
如果要使用标识符检索arraylist,也可以使用
映射

map.put("id",new ArrayList<String>());
map.put(“id”,新的ArrayList());

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

实现您自己的
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"));
class NamedList扩展了ArrayList
{
私有字符串名称;
公共名称列表(字符串名称){
this.name=名称;
}
//标识符的getter/setter和其他内容等。
}
ArrayList superList=新的ArrayList();
添加(新名称列表(“babangida”);
如果您需要“命名”您的ArrayList,那么您确实希望创建一个有意义的数据结构,而不是使用hack。毕竟,这是面向对象编程:

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;
    }
}
public void MyNamedBean{
私有字符串名称;
私有最终列表=新的ArrayList();
公共MyNamedBean(字符串名称){
this.name=名称;
}
公共字符串getName(){
返回名称;
}
//如果您不需要更改名称,请创建该字段
//最后,删除此方法。
公共void集合名(字符串名){
this.name=名称;
}
//它应该有一个更有意义的名字。
公共列表getList(){
退货清单;
}
}

更新,基于我对另一个答案的评论:这是一个OO设计问题。如果它是一个带有名称的列表,那么它不仅仅是一个列表,这意味着您不应该直接扩展列表实现,而应该创建一个有意义的类。如果您在某个时候需要第二个列表,或另一个“名称”(例如,人类可读的标签),该怎么办?您可以阅读关于何时使用继承和何时使用组合的。另请参见。

“您将失去迭代顺序”=>这取决于映射实现<例如,code>LinkedHashMap
保留插入顺序。@assylias+1,我只是想建议
LinkedHashMap
@VincenzoSanchez我的主要意见是,使用您的方法按名称检索
NamedList
将是一个O(n)操作,需要在所有列表上循环,而使用Map方法,它变成了一个O(1)操作。@assylias但是如果用户想保留两个同名的列表呢?e、 狗,猫,猫,马,猫。op不需要合并这些“猫”列表?在这种情况下,映射将失败。我错了吗?@VincenzoSanchez是的,你是对的,地图方法假设名称是唯一的标识符,事实可能并非如此——老实说,这个问题非常模糊。或者他可以将这些列表存储在一个
地图
,在地图上,每个名字都指向所有具有该名字的列表。我将对此进行研究。我不确定我是否曾经尝试过用Java实现映射。你不必实现映射。Jave为你提供了一个。尝试新的HashMap()@VincenzoSanchez我会说“看我的”:-)要添加不相关的功能,应该使用组合,而不是直接从ArrayList继承。如果结构中现在需要两个单独的列表,该怎么办?它还隐藏了实现细节,例如使用ArrayList或LinkedList。看。