簡體   English   中英

Java:在對象數組中搜索2個特定的對象值

[英]Java: Searching in an array of objects, for 2 specific object values

我正在用Java做一個包含(x,y)坐標的項目。 我創建了一個具有保護整數X和Y的Cell類; 在初始化時,我做一個for循環,它通過乘以用戶給出的X和Y來設置一個單元格數組,比如X = 10和Y = 10,我創建一個單元格數組[100]。

但是,如何快速搜索數組,而不進行for循環並及時檢查每個單獨的值?

假設我正在尋找包含X = 5&y = 3的對象。我知道我可以通過for循環查找值為x和y的對象,但我想知道是否有辦法做二進制搜索並找到包含X = 5和Y = 5的對象[i]“快一點”。

非常感謝你。

這聽起來像(如果你想使用二進制搜索),你將元素0設置為x = 0, y = 0的Cell; 元素1到x = 0, y = 1等。如果是這樣,你應該能夠輕松計算給定Cell的精確索引:

// contains the Cell with x = desiredX, y = desiredY
yourArray[desiredX * X + desiredY];

但是,如果這是您要執行的操作,則制作二維數組可能會更簡單:

yourArray = new Cell[X][Y];
...
yourArray[desiredX][desiredY];

執行此操作的方法是以某種方式排列數組中的Cell對象,以便從X,Y坐標到數組中Cell的索引之間進行簡單映射。

例如,讓我們假設X和Y從1到10。假設我們然后排列像元,這樣:

array[0] = Cell(1, 1);
array[1] = Cell(1, 2);
...
array[9] = Cell(1, 10);
array[10] = Cell(2, 1);
array[11] = Cell(2, 2);
...
array[99] = Cell(10, 10);

應該很容易看出我們可以計算數組中Cell(i,j)的索引並按如下方式獲取單元:

public Cell getCell(Cell[] array, int i, int j) {
    int index = (10 * (i - 1)) + (j - 1);
    return array[index];
}

支持N維數組類型的編程語言通常使用這種方法來實現它們。

這可以通過簡單的修改來處理以下情況:

  • 常數10是別的東西
  • 矩陣不是正方形,
  • 矩陣有兩個以上的維度
  • 索引從0到N - 1而不是從1到N
  • 諸如此類

您可以使用多種其他方式來表示Java中的二維矩陣。 最簡單的方法就是使用Cell[][] cells ,該Cell[][] cells使您可以將單元格作為cells[i-1][j-1] 可以設計更復雜的表示形式,如果矩陣稀疏(即缺少單元格),則使用較少的空間,但代價是更復雜的代碼和更慢的訪問時間。

以上兩個答案顯示了快速獲取數組索引的簡單方法。 我想提出一個具有鍵,值配對的替代使用哈希映射。 該值可以是對象。 訪問hashmap元素以恆定時間運行..

暫無
暫無

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

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