Java 删除两个元素中的一个,而不创建原始列表的副本
如何通过同时删除两个项目中的一个来浏览Java列表,而不创建原始列表的副本。 我尝试使用此代码,但最终得到一个空列表。有人有主意吗Java 删除两个元素中的一个,而不创建原始列表的副本,java,Java,如何通过同时删除两个项目中的一个来浏览Java列表,而不创建原始列表的副本。 我尝试使用此代码,但最终得到一个空列表。有人有主意吗 **package test; import java.util.ArrayList; //import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class suppressionUnEleme
**package test;
import java.util.ArrayList;
//import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class suppressionUnElementSurDeuxSansCopie {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
supprimeElement(list);
System.out.println(list);
}
public static void supprimeElement(List<Integer> list) {
Iterator<Integer> i = list.iterator();
while(i.hasNext()) {
Integer e = i.next();
if (list.indexOf(e)%2 ==0) {
i.remove();
}
//list.removeIf(n -> (list.indexOf(e)%2==0));
}
}
}**
**包装测试;
导入java.util.ArrayList;
//导入java.util.ArrayList;
导入java.util.Iterator;
导入java.util.LinkedList;
导入java.util.List;
公共类suppressionUnElementSurDeuxSansCopie{
公共静态void main(字符串[]args){
列表=新的ArrayList();
增加第(1)款;
增加(2);
增加(3);
增加(4);
系统输出打印项次(列表);
供应要素(清单);
系统输出打印项次(列表);
}
公共静态void supprimeElement(列表){
迭代器i=list.Iterator();
while(i.hasNext()){
整数e=i.next();
if(list.indexOf(e)%2==0){
i、 删除();
}
//list.removeIf(n->(list.indexOf(e)%2==0));
}
}
}**
使用迭代器是正确的想法。问题是,然后使用迭代器中的值引用已修改的列表,这会导致错误的行为
一种方法是按住一个布尔值
,指示元素是偶数还是非偶数,然后边走边翻转:
public static void supprimeElement(List<Integer> list) {
boolean isEven = true;
Iterator<Integer> i = list.iterator();
while(i.hasNext()) {
i.next();
if (isEven) {
i.remove();
}
isEven = !isEven;
}
}
publicstaticvoidsupprimeelement(列表){
布尔值isEven=true;
迭代器i=list.Iterator();
while(i.hasNext()){
i、 next();
如果(isEven){
i、 删除();
}
isEven=!isEven;
}
}
使用迭代器是正确的想法。问题是,然后使用迭代器中的值引用已修改的列表,这会导致错误的行为
一种方法是按住一个布尔值
,指示元素是偶数还是非偶数,然后边走边翻转:
public static void supprimeElement(List<Integer> list) {
boolean isEven = true;
Iterator<Integer> i = list.iterator();
while(i.hasNext()) {
i.next();
if (isEven) {
i.remove();
}
isEven = !isEven;
}
}
publicstaticvoidsupprimeelement(列表){
布尔值isEven=true;
迭代器i=list.Iterator();
while(i.hasNext()){
i、 next();
如果(isEven){
i、 删除();
}
isEven=!isEven;
}
}
这里是我能想到的最简单的方法,即直接涉及索引,因为这是您想要用作删除标准的内容。诀窍是从后到前工作,这样你就不会考虑删除会如何影响以后的候选人:
package test;
import java.util.ArrayList;
import java.util.List;
class suppressionUnElementSurDeuxSansCopie {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
supprimeElement(list);
System.out.println(list);
}
public static void supprimeElement(List<Integer> list) {
for (int i = list.size() - 1 ; i >= 0 ; i--)
if (i % 2 == 0)
list.remove(i);
}
}
这是我能想到的最简单的方法,直接涉及索引,因为这是您想要用作删除标准的内容。诀窍是从后到前工作,这样你就不会考虑删除会如何影响以后的候选人:
package test;
import java.util.ArrayList;
import java.util.List;
class suppressionUnElementSurDeuxSansCopie {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
System.out.println(list);
supprimeElement(list);
System.out.println(list);
}
public static void supprimeElement(List<Integer> list) {
for (int i = list.size() - 1 ; i >= 0 ; i--)
if (i % 2 == 0)
list.remove(i);
}
}
您是否试图删除所有其他元素,或者是否存在应删除元素的逻辑?例如,我希望删除具有偶数索引的元素,但不创建原始列表的副本。如果元素为偶数,请删除它。现在,下一个元素的索引过去是3,但现在是2,因为您删除了前一个第二个元素。因此,您的程序将继续删除元素。您是否正在尝试删除所有其他元素,或者是否存在应删除哪些元素的逻辑?我想删除元素,例如,使用偶数索引,但不创建原始列表的副本。如果元素为偶数,则删除它。现在,下一个元素的索引过去是3,但现在是2,因为您删除了前一个第二个元素。所以你的程序会不断删除元素。非常感谢。这对我有用。在这种情况下我可以使用流吗。流不会修改基础集合@rady不同意这个解决方案,抱歉。非常感谢。这对我有用。在这种情况下我可以使用流吗。流不会修改基础集合@rady不同意这个解决方案,抱歉。谢谢你的回答。但只有当列表包含排序整数时,它才起作用。我的问题是一般性的。如果列表中包含字符串或其他对象,该怎么办?谢谢你的回答。但只有当列表包含排序整数时,它才起作用。我的问题是一般性的。如果列表包含字符串或其他对象,该怎么办。