這可能是您JAVA專家的一個簡單問題,但我比較新,所以我想我會問。我需要測試字符串X是否存在於一個集合中。我不需要任何關聯的值或索引,我不需要任何訂單。我只需要知道它是否存在。我知道這可以使用HashMap或ArrayList來實現,但這些看起來過度。該怎麼辦?只是一個列表?還是有更基本的東西可以達到同樣的目的。測試給定集合中是否存在某個字符串X的最快方法是什麼?什麼是確定值是否在Java中的一組值中的最快方法?
回答
聽起來像是你想有一個HashSet<String>
:
Set<String> set = new HashSet<String>();
set.add("foo");
set.add("bar");
boolean no = set.contains("baz");
boolean yes = set.contains("foo");
還有其他Set
實現可用,當然,但HashSet
可能是最合適的位置。
我們實際上使用了幾乎相同的字符串名稱;) – Jack 2012-02-17 21:53:41
您不只有ArrayList
和HashMap
,JDK帶有很多種類,您可以在其中找到您要查找的內容:集合。
其中之一例如是HashSet
,其中有您正在尋找有關功能..
Set<String> set = new HashSet<String>();
set.add("foo");
set.add("bar");
boolean b = set.contains("foo");
import java.util.Arrays;
...
if (Arrays.asList("foo", "bar", "baz").contains(myString)) {
...
}
我知道,這可以用一個HashMap或ArrayList的實現,但這些似乎矯枉過正。
究竟什麼是「大材小用」關於使用被設計做的正是你想要的一個內置類,並做到這一點非常快?因爲這就是HashMap
是。 HashSet
在它的接口(未映射的值)中會更加基本一些,但實際上它通過具有空值的HashMap
來實現。
好吧,'HashMap'被設計爲將鍵映射到值,這比OP想要的更多*因爲他只需要「存在」。另一方面,'HashSet' – 2012-02-17 21:59:34
幾個答案建議HashSet
,其他人指出,簡單的集合可能會更快的小集 - 你沒有說什麼大小的集合。
字符串的大小也是相關的,因爲HashSet
等將使用字符串的哈希碼,它是從字符串的整個內容(然後緩存)計算出來的。這可能需要一點時間 - 但另一方面,它可能已經被計算,取決於你的代碼,所以不會產生額外的成本。
在某些情況下,您可以通過字符串的大小或通過檢查前幾個字符來排除字符串 - 它取決於您的數據和字符串集。數據結構(如Trie)在這裏可能很有用 - (但您想要一個簡單的解決方案)。
如果性能至關重要,那麼您需要在現實條件下仔細對所有建議的解決方案進行基準測試。請參閱How do I write a correct micro-benchmark in Java?
如果您確實需要快速解決方案(這對您的應用程序實際上是否至關重要?),那麼您可能需要忍受「矯枉過正」!
不要使用含有使用Collections.binarySearch(列表,對象)
不要忘了排序使用此方法集合之前。排序(列表)
- 1. 確定PHP中是否存在URL的最快方法是什麼?
- 2. 什麼是確定數組是否被排序的最快方法?
- 3. 最快的方式來檢測值是否在Javascript中的一組值中
- 4. 在python中迭代字典值的最快方法是什麼?
- 5. 稀疏矩陣:確定值是否爲空的最快方法?
- 6. 什麼是在PHP中多維數組中回顯值的最快方法?
- 7. 確保一組值都是唯一的最簡潔的方法是什麼?
- 8. 確定Java HashMap中最低可用密鑰的最快方法是什麼?
- 9. 在C#中檢查值元組是否相等的正確方法是什麼?
- 10. 確定字符串是否有值的最簡潔的方法是什麼?
- 11. 確定十進制值的最快有效方法是Java中的整數
- 12. 確定變量是否是值列表中的任何一個的最短/最常用的方式是什麼?
- 13. 什麼是確定數組列表中全局最大值的好方法
- 14. 確定寄存器值是否等於零的最簡單方法是什麼?
- 15. 在Java中返回一對值的最佳方式是什麼?
- 16. 什麼是最快的方法來檢查給定的數組是否有數組或兩個值?
- 17. 在java中反序列化JSON的最快方法是什麼
- 18. 在Java中插入Integral的最快方法是什麼?
- 19. 在GLSL中傳遞值的最快方式是什麼?
- 20. 在java中布爾值賦值的有效方法是什麼?
- 21. 確定數組中是否存在值
- 22. 確定Object是否被更改的最佳方法是什麼?
- 23. 什麼是最好的方法來找出值是否存在於同一張表的一組列中
- 24. 確定SQL Server中是否存在臨時表的最佳方法是什麼?
- 25. 確定元素是否在排序數組中的最快方法
- 26. 在PHP中獲取關聯數組的最後一個鍵/值對的最快方法是什麼?
- 27. 什麼是使用Java中的ENUMS驗證值組合的最佳方法?
- 28. MongoDB - 獲取特定日期的最新值的最快方法是什麼?
- 29. 在Delphi中解析一行最快的方法是什麼?
- 30. 什麼是正確的方法來確定一個值是否匹配jqGrid的數據中的任何鍵?
集合有多大?如果不用真實的數據進行基準測試,您無法確定最快的解決方案。 – DNA 2012-02-17 22:14:26