我看到
Comparable
接口只允許執行compareTo
方法。那麼爲什麼我們甚至需要這個接口呢?爲什麼我們不能簡單地在我們想要的任何課程中定義和聲明該方法,而不必實現接口Comparable
?爲什麼Java'Comparable'比只使用compareTo方法更好?我知道這是正確的:
SortedSet<String> exampleSet = new TreeSet<String>();
< -TreeSet
implementsSortedSet
接口。所以如果我有一個名爲「Date
」的類實現Comparable
,這是正確的:Comparable<Date> example = new Date<Date>();
。如果是的話,我到底得到了什麼?我的意思是我得到什麼樣的對象?它有什麼屬性?如果不是,爲什麼不呢?
1
A
回答
2
爲什麼我們不能簡單地定義並聲明在任何我們想要的類中的方法,而無需實現Comparable接口?
您會如何期待排序方法在這種情況下工作?
能夠對任何元素都可以相互比較的集合進行排序真的很方便 - 並且一個接口就是表達它的方式。
這是正確的:
Comparable<Date> example = new Date<Date>();
不,除非Date
本身是通用的。您可能寫:
Comparable<Date> example = new Date();
...但它是奇這樣做。通常使用Comparable
的代碼要比較現有的對象 - 例如,它將從集合中獲取值並將它們相互比較。
0
爲什麼我們不能簡單地定義和聲明我們的 想要的任何類中的方法,而不必實現Comparable接口?
一些Collections
像TreeMap
,需要比較兩個對象,即使是一個簡單的add()
操作。這樣一棵樹需要在內部將「較小」的對象放在左側的樹中,並且在右側的子樹中放大(稍微簡化一點)。
因爲這樣的泛型集合(如TreeMap)被設計爲適用於所有對象,所以對象必須知道如何執行compareTo()。
像HashMaps這樣其他類別不需要的對象實現可比(他們使用hashcode
())
相關問題
- 1. 爲什麼使用比使用更好?
- 2. 爲什麼使用str()比__str更好__()
- 3. Ordered [A]爲什麼使用比較方法而不是重用compareTo?
- 4. 爲什麼Java中的字符串比較(CompareTo)比C#更快?
- 5. 爲什麼在重寫compareTo()方法時使用Comparable接口的compareTo()?
- 6. 什麼比較方法比較好?
- 7. 使用compareTo方法
- 8. 哪種方法更好,爲什麼?
- 9. 爲什麼System.nanoTime()方法比System.currentTimeMillis()更慢?
- 10. 重寫compareTo時使用compareTo方法?
- 11. 比使用ViewBag更好的方法
- 12. 爲什麼Date1.CompareTo(Date2)> 0比Date1> Date2更快?
- 13. 爲什麼「基於集合的方法」比「程序方法」更好?
- 14. 在will_paginate中使用helper方法的更好方法是什麼?
- 15. 爲什麼requestAnimationFrame比setInterval或setTimeout更好
- 16. 爲什麼mysql count(*)比count更好(id)
- 17. 爲什麼FileChannel比MemoryMappedBuffer表現更好?
- 18. 爲什麼str.format()比str()更好?
- 19. Excel VBA:爲什麼API比SendKeys更好?
- 20. 爲什麼ArrayDeque比LinkedList更好
- 21. 爲什麼boost :: any比void *更好?
- 22. 爲什麼poll()比select()更好?
- 23. 什麼比PHP Glob更好?
- 24. 什麼比邊框更好?
- 25. 什麼使得JIRA比Redmine更好
- 26. 比MD5更好的方法?
- 27. 比BufferedReader.readLine()更好的方法?
- 28. 創建實例的方法是「更好」的方法,爲什麼?
- 29. 爲什麼依賴注入比使用工廠更好?
- 30. 爲什麼在C++中使用「vector.at(x)」比「vector [x]」更好?
'你怎麼指望一個排序方法,在這種情況下工作?'=僅通過寫的'compareTo'方法?我的意思是我們仍然需要爲實現「Comparable」接口的任何類編寫方法,對吧?所以對於'Date'類,比方說,我想比較兩個日期(DD/MM/YYYY),我必須編寫一個實際完成所有比較工作的'compareTo'方法。所以如果我沒有在這個類中實現'Comparable',我的程序又有什麼不同? – user2027425
@ user2027425:Jon的觀點是,如果您希望某些_outside_代碼能夠幫助提供像例如排序,它必須知道如何掛鉤到你的代碼並比較不同的元素。實現'Comparable'主要是爲了讓您可以使用其他代碼或Java內置的庫,知道如何使用可比較的元素來做有用和有用的事情。 –
@ user2027425:不同的是,在你的情況下,你需要一遍又一遍地寫同樣的排序代碼:'Date'一次,'Foo'一次,'Bar'一次,'compareTo'方法每一個案子,因爲沒有什麼可說的,「嘿 - 這些類型都是我唯一關心的唯一方式,即一個價值與另一個相比如何。」這是整理關心的*唯一*的東西,那麼爲什麼你要編寫代碼來以一種關心你使用哪種類型的方式進行排序呢? –