我想要一個函式來從輸入的字符構建一個字串,并在它獲得包含的輸入字符時停止構建。
我知道我可以使用String.contains()它,但我正在學習 HashMaps 并且想知道是否有更快的方法可以將輸入的字符存盤在 HashMap 中并使用該HashMap.contains()方法。
uj5u.com熱心網友回復:
HashMap::containsKey是O(1),String::contains 不是。實作可能會改變 JVM 版本的依賴,但它更像是 O(n)。
所以,是的,用HashMap尋找的值應該是更快(在較小的資料,你可能不會注意到差別)比呼叫String::contains。但是一個 Map 存盤一個鍵和一個值,如果你不關心值,你可以使用 a Set(小心,所有值在這種型別的集合中都是唯一的)因為Set::contains是O(1)。
正如評論中提到的@n247s。除非您確實有性能問題,String::contains否則應該可以正常作業并使代碼更易于閱讀。
uj5u.com熱心網友回復:
ASet將是一個很好的資料結構在這里使用。
不過要注意一件事,
如果您需要case-sensitive搜索,則可以使用HashSet. 例子
Set<String> set = new HashSet<>();
否則,如果您需要case-insensitive搜索,那么TreeSet. 例子
Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
uj5u.com熱心網友回復:
HashMap<>只是一個擴展Map<>介面的類,你可以使用containsKey()或containsValue()。如果要回圈遍歷HashMap 中的值,可以使用HashMaps.values()方法并將值連接/添加到 String。
未經測驗:
int count = -1;
String new = "";
for (char c : map.values()) {
count ;
if (string.charAt(count).equals(c))
break;
new.concat(c);
}
uj5u.com熱心網友回復:
最好的方法是使用 aSet如果您不關心插入順序,但如果您這樣做,則LinkedHashSet應該使用 a ,這將使您的字符按插入順序排列。
這是LinkedHashSet檔案的鏈接。
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
但是,如果您確實想使用 的key/value對HashMap,您確實可以使用HashMap<Character, Character>,然后您可以檢查 map.containsKey() O(1),并map.containsValue() O(n)記住,因為containsValue()將使用O(n),最好只檢查String::contain該場景。如果您關心插入順序,還有一個LinkedHashMap可以為您做到這一點。鏈接到下面的檔案
https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370907.html
