2016-04-03 3 views
3

私はあなたがテーブルにデータを置くことができるプログラムを作成しようとしています。 HashMapこれについての最良の方法は?ハッシュマップを使ってJavaでテーブルを作成する

お勧めできない場合は、私は手紙のそれぞれを数えるのに苦労だし、それは、値のそれぞれにa = 8を与えるたびに1を加算しています、b瞬間

c = 0

public void main(String[] args){ 
    map.put("0", "a"); 
    map.put("1", "b"); 
    map.put("2", "c"); 
    map.put("3", "a"); 
    map.put("4", "b"); 
    map.put("5", "a"); 
    map.put("6", "b"); 
    map.put("7", "c"); 

    for(Map.Entry ent : map.entrySet()){ 
     if(map.containsValue("a")){ 
     x++;} 

     else if(map.containsValue("b")){ 
     y++;} 

     else if(map.containsValue("c")){ 
     z++;} 
    } 

    System.out.println("a = " + x); 
    System.out.println("b = " + y); 
    System.out.println("c = " + z); 

答えて

1

HashMapのに最善の方法を使用していますこれについて行く?

ハッシュマップは良い方法ですが、キーの出現数を単純にカウントできないため、例で使用している方法には問題があります。

だから私は、行インデックスのList<Integer>キープトラックと、HashMap<String, List<Integer>>を使用することをお勧め:あなたは、サードパーティからのデータ構造を使用して大丈夫です場合

HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>(); 
    String[] strs = {"a", "b", "c", "a", "b", "a", "b", "c"}; 

    for(int i = 0 ; i < strs.length ; i++) { 
     String s = strs[i]; 
     if(map.containsKey(s)) { 
      map.get(s).add(i); 
     } else { 
      map.put(s, Arrays.asList(new Integer[]{i})); 
     } 
    } 

    System.out.println("a = " + map.get("a").size()); 
    System.out.println("b = " + map.get("b").size()); 
    System.out.println("c = " + map.get("c").size()); 
+0

どのように行番号を保持するには? – Andrew

+0

@AndrewTobilko 'Integer'ではなく、' List 'を行のインデックスに使うことができます。' list.size() 'は、発生した回数です – Maljam

0

、あなたがGuava's ArrayListMultimapを使用することもできます。

Multimap<Character, Integer> map = ArrayListMultimap.create(); 
String str = "abcababc"; 

for (int i = 0 ; i < str.length() ; i++) { 
    map.put(str.charAt(i), i); 
} 

for (Character c : map.keySet()) { 
    System.out.println(String.format(%c = %d", c, map.get(c).size()); 
} 
関連する問題