新手java學生在這裏。我有一個ArrayList包含包含字符串和整數的對象。該對象的構造函數的結構如下MyClass(String, String, int, int, String)
。我想在構造函數中使用String的第一個實例來查找ArrayList元素的索引,但是我很難理解如何去做。我試過使用indexOf()
,但沒有成功找到特定元素的索引。如果有人會指出我正確的方向,我將不勝感激。乾杯獲取各種數據類型ArrayList的索引
0
A
回答
1
您必須覆蓋MyClass
中的等於。 根據您想達到什麼樣的,你的equals方法看起來是這樣的:
public boolean equals(Object o) {
if (o== null) return false;
if (!(o instanceof MyClass)) return false;
MyClass other = (MyClass) o;
if (other.firstString != null && this.firstString != null
&& this.firstString.equals(other.firstString) return true;
return false;
}
編輯:你應該重寫了hashCode爲好。重寫hashCode時,應考慮重寫equals時考慮的對象。所以,如果你測試相等對兩個MyClass的對象基於財產firstString,你應該inlcude firstString中的hashCode
public int hashCode() {
if (firstString == null) return 31;
return firstString.hashCode();
}
EDIT2: 什麼ArrayList中,當你調用的indexOf基本上是這樣做: 「爲(Entry e = header.next; e!= header; e = e.next)if(o.equals(e.element)) return index; index ++; }'
因此,每次調用indexOf()時,ArrayList都會調用對象的equals方法。 因此,可以說,你有一個看起來像這樣的列表:
MyClass m1 = new MyClass("this is some random string", other params);
MyClass m2 = new MyClass("this is my target string", other params);
MyClass m3 = new MyClass("this is irrelevant", other params);
list.add(m1);
list.add(m2);
list.add(m3);
現在,你想知道一個包含「這是我的目標字符串」 MyClass的對象的索引。 所以你做出的indexOf一個電話:
list.indexOf(new MyClass("this is my target string"), other params);
,並根據您的等於實現,它將返回1
1
你必須看看如何覆蓋你的班級中的equals
和hashcode
方法。這是Collection
的api用來執行這種操作的東西。
-1
不要以爲你真的應該在列表中的離子來存儲不同類型如果你能避免它的第一個地方?你真的有一個具有不同類型屬性的對象列表嗎?
相關問題
- 1. 各種數據類型
- 2. Java ArrayList與各種類型的對象
- 3. 搜索,獲得的各種數據
- 4. 各種數據類型訂貨代表
- 5. ArrayList,獲取值,從索引()到索引()
- 6. Lucene Zend,索引.doc,.pdf和各種類型的文件
- 7. 從字典數組ArrayList獲取索引
- 8. 使用數據綁定獲取各種類型項目列表的輸入
- 9. 各種類型的集合
- 10. flex中的各種wsdl數據類型的等效數據類型?
- 11. 支持各種數據類型的數據結構
- 12. 如何在Android中獲取ArrayList的模型數據類型?
- 13. 數據類型和索引
- 14. 正常化具有類似數據類型的各種屬性
- 15. 如何從索引搜索(有多種類型)中獲取每種類型的前1個文檔?
- 16. 如何獲得elasticsearch中每種類型索引的計數?
- 17. 從各種文檔類型
- 18. C++各種數據類型的可變數組?
- 19. 各種數據類型的Haskell IO函數
- 20. 具有各種輸入數據類型的scala函數
- 21. 返回各種數據類型的函數
- 22. 各種ng-repeat中的兩個$索引
- 23. 從不同數據類型的ArrayList獲取最高編號
- 24. 有關C++中各種數據類型的sizeof()的說明
- 25. ArrayList/LinkedList獲取第一個索引號
- 26. 在NSDictionary中存儲各種數據類型的新對象
- 27. JPA存儲各種類型的數據庫文件(JEE6)
- 28. 哪個數據庫節省了各種類型的變量集?
- 29. 在數據庫的單列中存儲各種對象類型
- 30. 如何通過AJAX .post()傳遞各種類型的數據?
我正在查看教程,並試圖理清如何將其應用於獲取arraylist中特定元素的索引。 – Spud
所以等於把這個和其他值進行比較並返回true或false。正確?哈希碼使用素數來確定結果是否等於1?我想,我還沒有真正想過。 – Spud
當在集合中查找對象時,indexOf調用等於方法。如果您不覆蓋equals,則會通過比較對象的引用來測試對象是否相等。換句話說,只有當它們是SAME對象時,兩個對象纔會被視爲等於。 – Maggie