[英]Is there a way to iterate through a two dimensional ArrayList and also invoke the class methods of the objects?
因此,我嘗試遍歷Java中的二維ArrayList。 現在,我將迭代部分簡化了,但是,我似乎無法從對象類中調用方法。
我已經檢查了拼寫,以確保正確拼寫了類方法。 它是。 我還嘗試了以一種遍歷2D Array(嵌套循環)的相同方式遍歷2D ArrayList,同時顯然使用ArrayList方法(.get()、. add()等)來選擇我需要的2D Arraylist中的特定對象。
for(int i = 0; i < layers.size(); i++)
{
for(int j = 0; j < layers.get(i).size(); j++)
{
layers.get(i).get(j).calculate();
layers.get(i).get(j).activate();
input3.add(layers.get(i).get(j).getOutput());
}
}
預期的結果是,循環將為ArrayList中的每個對象使用被調用的類對象進行對象預計算。 但是,它一直在說找不到我要調用的方法,這些方法據我所知。 我不確定如何解決此問題,只能希望其他人遇到此問題並想出解決方法。 先感謝您。
編輯/更新
應當指出,由於這是一個錯誤,BlueJ不允許我對其進行編譯。
現在了解“ 2D ArrayList”的含義,這是我的編碼方式:
enter code here
//First lets say we have a few different ArrayLists
ArrayList<Object> list1 = new ArrayList<Object>();
ArrayList<Object> list2 = new ArrayList<Object>();
ArrayList<Object> list3 = new ArrayList<Object>();
//Now lets say you want to iterate through all of these with only a few
//lines of code... Put them into another ArrayList
ArrayList<ArrayList> bigList = new ArrayList<ArrayList>();
這就是2D ArrayList的意思。 另一個ArrayList中的一組ArrayList。
同樣,.Calculate()和.Activate()方法從我所呈現的代碼片段中未顯示的對象實例化中獲取輸入。
有沒有一種方法可以遍歷...並調用對象的類方法?
是的,當然有。
無論對象存儲在數據結構中如何,都可以調用其方法。 您面臨的問題有兩個方面:
首先,將list1
, list2
, list3
,...聲明為ArrayList<Object>
。 這意味着,無論您放入列表中的什么內容,在檢索編譯器時都只會知道它是某種Object
。 因此,它僅允許您在這些元素上從Object
調用方法。 這可以通過顯式強制轉換解決,例如
MyClass element = (MyClass)(layers.get(i).get(j));
element.calculate();
但是,更好的選擇是首先使用正確的泛型類型。 請注意, ArrayList<ArrayList>
使用“原始”類型ArrayList
作為通用類型參數,這可能不是您想要的。
因此,假設您存儲的元素都是同一類型(例如MyClass
),那么干凈的解決方案將是這樣的:
ArrayList<MyClass> list1 = ...;
ArrayList<ArrayList<MyClass>> bigList = ...;
現在,編譯器將知道在bigList
有ArrayList<MyClass>
對象,從中,它也知道在bigList
的元素內有MyClass
對象。 因此,它將為您自動執行必要的強制類型轉換,您可以編寫bigList.get(i).get(j).methodOfMyClass(...)
。
如果您存儲在內部列表中的元素不具有公共(超級)類型,即它們唯一的隱式公共超級類型是Object
,那么您將沒有選擇,只能手動執行相應的instanceof
檢查和強制轉換。
順便說一下,由於ArrayList
(間接地)實現了Iterable
接口,因此您只需編寫
for ( ArrayList<MyClass> innerList : bigList ) {
for ( MyClass element : innerList ) {
element.methodOfMyClass(...);
}
}
遍歷bigList
中包含的所有列表的所有元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.