如何用数组替换HashMap <string,integer =“”>?</string,>

时间:2013-06-17 15:45:32

标签: java arrays hashmap

我有一个程序可以计算给定数组中单词的出现次数。它保留了文字和数量。例如,在给定的数组中:

String array[] = {"cat", "dog", "cat"}; 
我有2只猫和1只狗。使用HashMap制作它非常简单:

HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < wordarray.length; i++) {
    String word = wordarray[i].toLowerCase();
    if (map.containsKey(word)) {
        map.put(word, map.get(word) + 1);
    } else {
        map.put(word, 1);
    }
}

然后我只需将其打印出来:

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
}

但是有没有办法在没有HashMap的情况下只使用对象数组?

4 个答案:

答案 0 :(得分:4)

创建一个自定义类来保存字符串和int值,然后使用数组来保存它们。在伪代码中:

class Myclass
 public int myInt;
 public string MyString;
 //Constructor omited..


//Somewhere else..
MyClass[] my = new Myclass[2];
my[0] = new MyClass("string", 1);

答案 1 :(得分:3)

您可以创建Map.Entry键/值对的列表/数组。

已经有一种方法可以在HashMap中为您完成此操作:entrySet()

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#entrySet()

答案 2 :(得分:1)

这比使用HashMap慢得多,但它应该有效:

假设您确定文本中的单词不会超过N次(作为上限,您可以选择文本中的单词总数)。然后,您可以分配ArrayList元素的N大小的数组:a = new ArrayList[N]; for (int i = 0; i < N; i++) a[i] = new ArrayList<String>();

然后,对于每个单词w,您将遍历该数组,找到索引为cArrayList<String>的单元格,其中包含w并移动w }从cc+1(使用list.remove(Object)list.add(Object))。如果找不到单元格,请将w添加到第一个单元格的列表中:a[0].add(w)

一些优化:

  • 在数组中使用HashSet而非ArrayList,但在您的情况下看起来不合适;
  • 使用[N][N]大小的数组数组。会有更多的内存消耗,但花费的时间会更少。

答案 3 :(得分:1)

您可以使用数组检查Map的实现。关于这个

,这是一个很好的article