使用哈希映射在Java中创建表

时间:2016-04-03 22:35:00

标签: java hashmap hashtable

我正在尝试创建一个程序,允许您将任何数据放入表中,然后您可以执行函数,例如计算列,行中有多少单词等。使用HashMap最佳方式要解决这个问题?

如果不是你能推荐什么?

目前我正在努力计算每个字母,并且每次给a = 8bc = 0

每个值都加1
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);

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分: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());
}