簡體   English   中英

將 HashMap 鍵值轉換為 Java 中的字符數組

[英]Converting HashMap key values to Char Array in Java

我有以下 HashMap 我在方法中插入字符-整數對並返回此 hashmap:

HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();

for (...) {
    hmap.put(string[i], number[i]); 
}

但是,當我想將此返回的 hashmap 鍵轉換為字符數組時,它還包括括號和逗號:

char[] charArray = myReturnedHashMap.keySet().toString().toCharArray(); 
//it returns 8 char "[ A , B , C , ]" instead of just "A B C"

那么,我該如何解決呢?

更新:另一方面,我不確定在這種情況下使用 HashMap 是否是一個好主意。 我有一個循環,我只需要返回 char 和 int 值對。 然后在另一種方法中,我將 char 值轉換為 chararray。 任何想法?

您的問題是“keySet().toString()”的調用 - 這會創建 map 的字符串表示。

我想你想要這樣的東西:

Map<Character, Integer> hmap = new HashMap<Character, Integer>();
hmap.put('c', 1);
hmap.put('d', 2);
hmap.put('e', 3);

Character[] charArray = hmap.keySet().toArray(new Character[0]);

編輯:如果您需要對鍵進行排序,您可以使用 TreeMap 而不是 HashMap。 但請注意,如果您正在處理字符並期望進行特定於語言的排序,則需要一個 Collator 用於在 TreeMap 中進行排序。

這是一個簡單、可重復使用(適用於所有類型的地圖)且易於排序的解決方案:

char[] charArray = map.keySet().stream()
    .map(String::valueOf)
    .collect(Collectors.joining()).toCharArray();

這是最快的解決方案:

char[] chars = new char[map.size()];
int i = 0;
for (Character c : map.keySet()) {
    chars[i++] = c;
}

HashMap 中的鍵未排序。 使用另一個 map 實現對 stream 進行排序

您可以使用toArray()並注意它會返回一個Object[]數組。

Object[] charArray = myReturnedHashMap.keySet().toArray();

來自 jshell 的測試演示:

jshell> HashMap<Character, Integer> a = new HashMap<>()
a ==> {}

jshell> a.put('a', 1)
$11 ==> null

jshell> a.keySet()
$12 ==> [a]

jshell> a.keySet().to
toArray(     toString()   

jshell> a.keySet().toArray()
$13 ==> Object[1] { 'a' }

jshell> a.keySet().toArray()[0]
$14 ==> 'a'

jshell> (char)a.keySet().toArray()[0]
$15 ==> 'a'

在您的情況下,該toString()是不必要的。 您只想獲取該Set並將其轉換為數組。 像這樣的東西似乎工作得很好:

    HashMap<Character, Integer> hmap = new HashMap<Character, Integer>();
    hmap.put('a',1);
    hmap.put('b',1);
    hmap.put('c',1);
    Set<Character> characters = hmap.keySet();
    Character[] chars = new Character[characters.size()];
    characters.toArray(chars);
    System.out.println(Arrays.toString(chars));

使用toArray()

        Map<Character, Integer> map = new HashMap<Character, Integer>();
        map.put('a', 1);
        map.put('b', 1);
        Character[] charArray = map.keySet().toArray(Character[]::new);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM