簡體   English   中英

Java:具有類似於ArrayList的方法/功能的Bidimensional Array

[英]Java: Bidimensional Array with methods/capabilities similar to ArrayList

我想創建一個整數的XY數組(或任何類型),但我想使用類似於ArrayList類的“add”,“remove”,“contains”,“indexOf”等方法。

有沒有這些功能的現有課程?

PS:我不想創建ArrayList的ArrayList

不,AFAIK沒有這樣的類。 但實現一個應該相當容易:

class BiDimensionalArray<T>{
  Object[][] backupArray;
  int lengthX;
  int lengthY;

  public BiDimensionalArray(int lengthX, int lengthY) {
    backupArray = new Object[lengthX][lengthY];
    this.lengthX = lengthX;
    this.lengthY = lengthY;
  }

  public void set(int x, int y, T value){
    backupArray[x][y] = value;
  }

  public T get(int x, int y){
    return (T) backupArray[x][y];
  }

  public void addX(T[] valuesY) {
    Object[][] newArray = new Object[lengthX+1][lengthY];
    System.arraycopy(backupArray, 0, newArray, 0, lengthX);
    newArray[lengthX]=valuesY;
    backupArray = newArray;
    lengthX = lengthX+1;
  }
}

注意:Typeparameter不在內部使用,因為沒有new T[][]這樣的東西

EDITS
添加了addX方法進行演示
修復了編譯錯誤

根據您的描述,我建議您嘗試使用JAMA。
您還可以為XY矩陣創建自己的實現。 但是,為此,您必須確定實現的確切要求。
如果您的Matrix不是固定大小,那么您可以使用類似3元組格式的內容來存儲矩陣。 (只有當矩陣稀疏時,此表示才有效)。 在內部,您將使用三個ArrayLists; 一個用於存儲行號,第二個用於存儲列號,第三個用於存儲實際值。
因此,您將編寫add(int row, int column, int value)方法,該方法負責保持ArrayLists按行號排序,然后按列號等排序,以提高隨機訪問的效率。
使用此表示,您可以實現可用於ArrayList的所有方法,如remove()contains()

標准Java庫中沒有本機矩陣類型。 話雖如此,創建一個相當容易。 這些方法實現起來很簡單,您可以使用數組, List或其他方法對其進行備份。

public class Matrix<T> {
  private final List<T> values;
  private final int rows;

  public Matrix(int x, int y) {
    this.rows = x;
    values = new ArrayList<T>(x * y);
  ]

  public int get(int x, int y) {
    return values.get(x * rows + y);
  }

  public boolean contains(T t) {
    return values.contains(t);
  }

  // etc
}

查看JAMA ,它來自Mathworks和NIST。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM