Java 如何将重复值添加到ArrayList中?
我必须编辑字符串列表: 如果包含h字母,则删除该值; 如果它包含h和o,则不执行任何操作 如果该值包含字母o,则将其添加到列表中。 我坚持做一个复制品。 怎么了?为什么会发生这种情况 代码如下:Java 如何将重复值添加到ArrayList中?,java,arraylist,Java,Arraylist,我必须编辑字符串列表: 如果包含h字母,则删除该值; 如果它包含h和o,则不执行任何操作 如果该值包含字母o,则将其添加到列表中。 我坚持做一个复制品。 怎么了?为什么会发生这种情况 代码如下: public class MyClass { public static void main(String[] args) throws Exception { ArrayList<String> list = new ArrayList<String>(
public class MyClass {
public static void main(String[] args) throws Exception {
ArrayList<String> list = new ArrayList<String>();
list.add("hi"); // this one have to be removed
list.add("hello"); // this one have to be left without changes
list.add("ops"); // duplicate must be added to the list
list = fix(list);
for (String s : list) {
System.out.println(s);
}
}
public static ArrayList<String> fix(ArrayList<String> list) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains("h") && list.get(i).contains("o")) ;
// do nothing
else if (list.get(i).contains("h"))
list.remove(i);
else if (list.get(i).contains("o")) {
// The problem is here ===>
list.add(i + 1, list.get(i));
}
}
return list;
}
}
您正在添加一个元素,并且您正在再次检查它并再次添加一个元素。这将创建一个无限循环。这会解决你的问题。向前移动检查索引1以防止这种无限循环
else if (list.get(i).contains("h"))
{
list.remove(i);
i--;
}
else if (list.get(i).contains("o"))
{
list.add(i+1, list.get(i));
i++;
}
此外,当您删除一个元素时,您需要减少i,您应该得到OOM,内存不足错误
由于您正在将第i个位置的同一对象添加到i+1位置,因此它将继续递归地添加它
代码修复
需要在最后一个else块中增加i
改变
else if (list.get(i).contains("o")) {
// The problem is here ===>
list.add(i + 1, list.get(i));
}
到
不能修改for each循环中列表的大小。您需要为此使用迭代器:
Iterator<String> iterator = list.iterator();
您可以通过调用next方法来创建对当前对象的引用。创建一个新的列表对象并在其中添加值,在for循环之后,您可以将新列表的所有元素添加到原始列表中,以避免在迭代添加新元素时更改的列表大小时出现无限循环 创建临时列表
List<String> newList = new ArrayList<String>();
遵守这一准则
else if (list.get(i).contains("o")) {
newList.add(list.get(i));
}
在for循环之后,将newList附加到原始列表
list.addAll(newList);
我建议你问问给你这个作业的人。这可能意味着很多事情。问题是什么?有什么例外吗?你是说它一直在增加指针的位置?为什么不:list.addi,list.geti++@Leonid我已经提供了解决方案,如果解决了你的问题,请接受/投票
List<String> newList = new ArrayList<String>();
else if (list.get(i).contains("o")) {
list.add(i+1, list.get(i));
}
else if (list.get(i).contains("o")) {
newList.add(list.get(i));
}
list.addAll(newList);
public class MyClass
{
public static void main(String[] args) throws Exception
{
ArrayList<String> list = new ArrayList<String>();
list.add("hi"); // this one have to be removed
list.add("hello"); // this one have to be left without changes
list.add("ops"); // duplicate must be added to the list
list = fix(list);
for (String s : list)
{
System.out.println(s);
}
}
public static ArrayList<String> fix(ArrayList<String> list) {
ArrayList<String>tempList=new ArrayList<>();
for (int i = 0; i < list.size(); i++){
if (list.get(i).contains("h") && list.get(i).contains("o"))
{
tempList.add(list.get(i));
}
else if (list.get(i).contains("o"))
{
tempList.add(list.get(i));
tempList.add(list.get(i));
}
}
return tempList;
}
}