[英]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維數組類型的編程語言通常使用這種方法來實現它們。
這可以通過簡單的修改來處理以下情況:
您可以使用多種其他方式來表示Java中的二維矩陣。 最簡單的方法就是使用Cell[][] cells
,該Cell[][] cells
使您可以將單元格作為cells[i-1][j-1]
。 可以設計更復雜的表示形式,如果矩陣稀疏(即缺少單元格),則使用較少的空間,但代價是更復雜的代碼和更慢的訪問時間。
以上兩個答案顯示了快速獲取數組索引的簡單方法。 我想提出一個具有鍵,值配對的替代使用哈希映射。 該值可以是對象。 訪問hashmap元素以恆定時間運行..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.