這是我的情況,我想爲我正在處理的3d項目創建一個矩陣緩衝區。如何使用ArrayList和Array編寫三維矩陣
很多人對堆棧溢出提議做這樣
ArrayList<ArrayList<object>>
然而事情這個結構是造成問題,因爲我需要一個固定大小的矩陣和我知道的影響是add(i,object)
作爲對的複雜性操作。另一方面,我的矩陣的最後一個嵌套層次需要具有可變大小,所以如果對象位於相同位置,它只會將其自身添加到堆棧中。
這是我的情況,我想爲我正在處理的3d項目創建一個矩陣緩衝區。如何使用ArrayList和Array編寫三維矩陣
很多人對堆棧溢出提議做這樣
ArrayList<ArrayList<object>>
然而事情這個結構是造成問題,因爲我需要一個固定大小的矩陣和我知道的影響是add(i,object)
作爲對的複雜性操作。另一方面,我的矩陣的最後一個嵌套層次需要具有可變大小,所以如果對象位於相同位置,它只會將其自身添加到堆棧中。
如果你需要一個長度可變的第三維矩陣,爲什麼不做ArrayList [] []?
顯然,你不能實例化一個通用的矩陣,但可以從原始類型強制轉換爲Object(假設這是你想要的)是這樣的:
ArrayList<Object>[][] box = (ArrayList<Object>[][])new ArrayList[length][width];
這將導致一個固定大小具有可變長度第三維的矩陣。不過要記住用ArrayList填充矩陣,因爲整個矩陣將被填充爲null。
可變長度第三維可以由許多不同的集合處理。如果你的第三維真的像一個堆棧(或者甚至是一個Queue/Deque),那麼我會使用LinkedList
來處理它,因爲它可以從集合的正面/背面添加和移除對象的速度。
爲了創建類型的列表E
你可以寫的二維矩陣:
LinkedList<E>[][] matrix = new LinkedList[length][width];
然後之後,我會建議實例的所有名單,像這樣爲了防止空指針問題:
for(int i = 0; i < matrix.length; i++)
for(int j = 0; j < matrix[0].length; j++)
matrix[i][j] = new LinkedList<>();
我假設你正在使用的Java 7,如果沒有,乾脆把類型(E
)到尖括號實例的每個元素時。我希望這可以幫助,並有趣的編碼! =)
好鑄造聽起來像一個可能的解決方案。我目前正在做類似的事情,但我沒有投射。我覺得應該有更好的解決辦法嗎?是不是有一個類似於數組的結構對象? –
與數組(即列表)類似的集合是LinkedList,ArrayList和Vector。 ArrayList優於Vector,並且通常ArrayList比LinkedList具有更快的訪問速度,並且使用的內存少得多,所以它通常是您想要的。如果你對這個第三維有更多具體的約束,比如只在前面或後面添加,你可以使用ArrayDeque或Stack,除此之外你真的使用ArrayList。 –