Java 如何在不使用Stream API、MAP、Hashset和collection API的情况下计算已排序ArrayList中每个字符串的频率
我已经尝试使用下面的代码,虽然它可以工作,但不满足要求。请分享您的知识,谢谢Java 如何在不使用Stream API、MAP、Hashset和collection API的情况下计算已排序ArrayList中每个字符串的频率,java,algorithm,sorting,arraylist,frequency,Java,Algorithm,Sorting,Arraylist,Frequency,我已经尝试使用下面的代码,虽然它可以工作,但不满足要求。请分享您的知识,谢谢 String temp; for(int i = 0; i < lexicon.size(); i++) { for (int j = lexicon.size() - 1; j > i; j--) { if (lexicon.get(i).compareTo(lexicon.get(j)) > 0)
String temp;
for(int i = 0; i < lexicon.size(); i++)
{
for (int j = lexicon.size() - 1; j > i; j--)
{
if (lexicon.get(i).compareTo(lexicon.get(j)) > 0)
{
temp = lexicon.get(i);
lexicon.set(i,lexicon.get(j)) ;
lexicon.set(j,temp);
}
}
}
ArrayList<String> uniqueWords = new ArrayList<String>();
for(int i = 0; i < lexicon.size(); i++) //Removing duplicates
{
int wordCount = 1;
uniqueWords.add(lexicon.get(i));
for(int j = i+1; j < lexicon.size(); j++)
{
if(uniqueWords.get(i).equals(lexicon.get(j)))
{
wordCount++;
lexicon.remove(j);
}
}
System.out.println(uniqueWords.get(i) + " " + wordCount);
}
我需要这样的东西:为那个词计数
a 11
about 1
acknowledge 1
以此类推,问题是你在
lexicon.remove(j)中从你的词典中删除元素代码>并通过查看lexicon.get(j)
我不想给你完整的代码,因为你不会从中学到任何东西,但我希望我给了你足够的提示,来解决你的问题。尝试调试您的代码,看看变量会发生什么:)在索引j
处删除时,j
get增加了j++,实际上跳过了一个变量,它本应继续而不增加
如前所述:
String word = uniqueWords.get(i);
int j = i+1;
while (j < lexicon.size() && word.equals(lexicon.get(j)))
{
wordCount++;
lexicon.remove(j);
}
stringword=uniqueWords.get(i);
int j=i+1;
而(j
(我将给出代码,因为它显示了一种不同的方法。)不使用流API,就像使用流API一样,然后用for
循环或使用迭代器替换它。我认为我们需要更多的信息。什么是词典
,为什么你的单字
是列表
而不是集合
?还请提供一个示例输入和预期输出!lexicon-将其作为任何其他变量名:我不想使用集合apiMan的任何子集,我知道lexicon是一个变量。。。它是什么类型的?初始值是多少?您提供的代码不完整。@我通常不会给出代码,所以我理解。但是我不希望他继续使用++j,在if中引入--j。也许休息一下,我更希望他学习干净的代码。我会觉得提到break
是有意义的。lexicon.remove(j)-它的工作是删除重复的,如果没有对词典进行排序,那么这个代码就不会完全正常工作。因为它是被分类的,所以problems@aBnormaLz请停止评判你不知道谁是大,小,beginner@jatinmittal不过,诺曼奇也有一个观点:这个问题应该仍然很有趣,需要一些努力。我给他打了+1分。我的答案取决于正在排序的数组。利用这一点将意味着一个循环删除i+1。这种有点不同的方法最好用代码来解释。顺便说一句,虽然不做太多的回答已经足够高级了,但只有他的漫画头像。。。
String word = uniqueWords.get(i);
int j = i+1;
while (j < lexicon.size() && word.equals(lexicon.get(j)))
{
wordCount++;
lexicon.remove(j);
}