ArrayList
存储Strings
。该程序提示用户选择操作,可进行添加字符串到列表、打印条目等操作。我想创建一个名为removeDuplicates()
的方法。该方法将搜索ArrayList
并删除任何重复值。我希望保留列表中一个重复值的实例。我还希望此方法返回删除的总重复项数。我一直在尝试使用嵌套循环来完成这个任务,但是遇到了麻烦,因为当条目被删除时,
ArrayList
的索引会改变,导致事情无法按预期工作。我知道概念上需要做什么,但在代码实现方面遇到了困难。以下是一些伪代码:
从第一个条目开始; 检查列表中每个后续条目,看它是否与第一个条目匹配; 删除列表中每个匹配第一个条目的后续条目;
检查所有条目后,移至第二个条目; 检查列表中每个条目,看其是否与第二个条目匹配; 删除列表中每个与第二个条目匹配的条目;
对于列表中的每个条目重复此过程
以下是我目前拥有的代码:
public int removeDuplicates()
{
int duplicates = 0;
for ( int i = 0; i < strings.size(); i++ )
{
for ( int j = 0; j < strings.size(); j++ )
{
if ( i == j )
{
// i & j refer to same entry so do nothing
}
else if ( strings.get( j ).equals( strings.get( i ) ) )
{
strings.remove( j );
duplicates++;
}
}
}
return duplicates;
}
更新: 看起来Will正在寻找一种作业解决方案,其中涉及开发算法以删除重复项,而不是使用Sets的实用解决方案。请参见他的评论:
谢谢您的建议。这是作业的一部分,我相信老师打算的解决方案不包括集合。换句话说,我需要想出一种在不使用HashSet
的情况下搜索并删除重复项的解决方案。老师建议使用嵌套循环,这就是我正在努力做的事情,但在删除某些条目后,我一直遇到一些关于ArrayList
索引的问题。
Set
=) - BorisOkunskiy