2016-04-03 30 views
3

Herhangi bir veriyi bir tabloya koymanızı sağlayan bir program oluşturmaya çalışıyorum ve bir sütun, satır vb. Içinde kaç kelimenin bulunduğunu belirleme gibi işlevleri gerçekleştirebilirsiniz. Bunun için en iyi yol bir HashMap?Java'da tablo oluşturmak için hash eşlemelerini kullanma

Eğer önerileriniz yoksa? Şu anda

Ben harflerin her saymak mücadele ediyorum ve bir HashMap iyi şekilde kullanıyor her zaman a = 8, b ve

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); 

cevap

1

c = 0 veren değerlerin her birine 1 ekleyen Bu konuda gitmek için?

HashMap gitmek için iyi bir yoldur, ancak örneğinizde kullanma şekliniz kusurludur çünkü bir anahtarın kaç kez var olduğunu kolayca sayamazsınız. Yani

Ben satırın endeksi takip List<Integer> ile HashMap<String, List<Integer>> kullanmanızı öneririz:

bir üçüncü şahıstan bir veri yapısını kullanarak tamam olması durumunda
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

Bir dizi satırı nasıl tutabilirsiniz? – Andrew

+0

@AndrewTobilko "Tamsayı" yerine, satırların indisleri için 'List ' kullanabilir ve 'list.size()', olay sayısı olabilir – Maljam

0

, kullanmak isteyebilirsiniz 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()); 
} 
İlgili konular