簡體   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