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