一个人如何建立一个循环来计算一个单词(不是ArrayLists)在一个数组中的出现次数。这是我设置的循环,但是将其打印出来只会给我一个从0到单词数组大小的数字数组。我还希望对每个字的计数值存储到一个数组
int[] wordCountList = new int[arrayCount]; //arrayCount is just the size of the array of words
int counter = 0;
for(int p = 0; p < words.length; p++)
{
String currentItem = words[p]; //words is the array of words
if(words[p].equals(currentItem))
{
wordCountList[p] = counter++;
}
}
此外,如果我先按字母顺序对数组进行排序,然后计算每个单词的出现次数,会更好吗?
答案 0 :(得分:1)
使用Java 8 Stream API
String[] words = {"banana", "lemon", "banana", "apple"};
Map<String, Long> wordsCount = Stream.of(words).collect(
Collectors.groupingBy(Function.identity(), Collectors.counting()));
Function.identity()
的含义是“项目本身”。
答案 1 :(得分:0)
解决此问题的一种典型方法是使用HashMap
将事件存储为键值对
Map<String, Integer> map = new HashMap<>();
for(String word: words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
System.out.println(map)
现在map
会将每个单词映射到它出现的次数,假设您有以下示例
String[] words = {"banana", "lemon", "banana", "apple"};
然后地图将包含
banana ==> 2
lemon => 1
apple => 1
答案 2 :(得分:0)
你的代码主要是罚款,唯一的问题是,你不定义你正在寻找的话。
int[] wordCountList = new int[arrayCount]; //arrayCount is just the size of the array of words
for(int p = 0; p < words.length; p++){
//int counter = 0;
for(String needle : words){
//String currentItem = words[p]; //words is the array of words
if(words[p].equals(needle)){
wordCountList[p]++;
}
}
}
对于它的价值,可以计数更快的单词吗?是的,但是只能通过排序(例如bucketsort aka.hash)来实现。