[英]Can I use HashMap of characters in place of String?
我想要一個 function 來從輸入的字符構建一個字符串,如果它獲得包含的輸入字符,則停止構建。
我知道我可以為此使用String.contains()
但我正在學習 HashMaps 並且想知道是否有一種更快的方法可以將輸入的字符存儲在 HashMap 中並使用HashMap.contains()
方法。
HashMap<>只是一個擴展Map<>接口的 class ,您可以使用containsKey()或containsValue() 。 如果要遍歷HashMap中的值,可以使用HashMaps.values()方法並將值連接/添加到字符串。
未經測試:
int count = -1;
String new = "";
for (char c : map.values()) {
count++;
if (string.charAt(count).equals(c))
break;
new.concat(c);
}
Set
將是在這里使用的一個很好的數據結構。
不過,請注意一件事,
如果您需要case-sensitive
搜索,則可以使用HashSet
。 例子
Set<String> set = new HashSet<>();
否則,如果您需要case-insensitive
搜索,則需要TreeSet
。 例子
Set<String> set = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
如果您不關心插入順序,最好的方法是使用Set
,但如果您這樣做,您應該使用LinkedHashSet
,這將使您的字符保持插入順序。
這是LinkedHashSet
文檔的鏈接。 https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html
But if you actually want to use the key
/ value
pair of the HashMap
, you can indeed use a HashMap<Character, Character>
, then you can check with map.containsKey() O(1)
, and map.containsValue() O(n)
請記住,因為containsValue()
將使用O(n)
,所以最好只檢查String::contain
在那種情況下。 如果您關心插入順序,還有一個LinkedHashMap
可以為您做到這一點。 鏈接到下面的文檔https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.