2016-04-03 2 views
3

Я пытаюсь создать программу, которая позволяет помещать любые данные в таблицу, и вы можете выполнять такие функции, как подсчет количества слов в столбце, строке и т. Д. Использует a HashMap лучший способ сделать это?Использование хеш-карт для создания таблицы в Java

Если нет, что вы можете порекомендовать?

На данный момент я изо всех сил, чтобы посчитать каждую из букв, и это добавление 1 к каждому из значений каждый раз давая a = 8, 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 лучший способ идти об этом?

HashMap - это хороший способ, но способ, которым вы используете его в своем примере, является ошибочным, потому что вы не можете просто подсчитать количество вхождений ключа.

Так что я предлагаю использовать HashMap<String, List<Integer>> с 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()); 
} 
Смежные вопросы