Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除两个元素中的一个,而不创建原始列表的副本_Java - Fatal编程技术网

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

如何通过同时删除两个项目中的一个来浏览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 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不同意这个解决方案,抱歉。谢谢你的回答。但只有当列表包含排序整数时,它才起作用。我的问题是一般性的。如果列表中包含字符串或其他对象,该怎么办?谢谢你的回答。但只有当列表包含排序整数时,它才起作用。我的问题是一般性的。如果列表包含字符串或其他对象,该怎么办。