java - Java中删除数组中的所有元素

标签 java

我对删除 Java 中对象的 array 中按 number 的所有元素有疑问,不建议这样做使用ArrayList,该方法有效,但只是它不会消除某些元素,而由于它们在数组中的位置而导致某些元素被修改

public class Pack {
    static int nextNumber = 0;
    int number;
    String name;

    public Pack(String name) {
        this.number = ++nextNumber;
        this.name = name;
    }

    @Override
    public String toString() {
        return "Pack ID:" + number + " - Name: " + name;
    }
}

容器

class Container {
    static int nextNumber = 0;
    int number;
    int qtPack;
    Pack[] packs;

    public Container() {
        this.number = ++nextNumber;
        this.qtPack = 0;
        this.packs = new Pack[10];
    }

    public boolean addPack(Pack pack) {
        packs[qtPack] = pack;
        qtPack++;
        return true;
    }

    public Pack removePack(int numberPack) {
        int idx;
        Pack removePack = null;
        idx = indexOfPackByID(numberPack);
        if (idx != -1) {
            removePack = packs[idx];
            if (removePack != null) {
                for (int i = idx; i < qtPack - 1; i++) {
                    packs[i] = packs[i + 1];
                }
                qtPack--;
            }
        }
        return removePack;
    }

    private int indexOfPackByID(int numberPack) {
        for (int i = 0; i < qtPack; i++) {
            if ((packs[i] != null)
                    && (packs[i].number == numberPack)) {
                return i;
            }
        }
        return -1;
    }
}

主要

public class Main {

    public static void main(String[] args) {
        Pack[] packs = new Pack[5];
        packs[0] = new Pack("A");
        packs[1] = new Pack("B");
        packs[2] = new Pack("C");
        packs[3] = new Pack("D");
        packs[4] = new Pack("E");

        Container container = new Container();
        for (int i = 0; i < packs.length; i++) {
            container.addPack(packs[i]);
        }

        System.out.println("--- PACK IN CONTAINER ---");
        for (int i = 0; i < container.qtPack; i++) {
            System.out.println(container.packs[i].toString());
        }

        System.out.println("\n--- REMOVE PACK ---");
        for (int i = 0; i < container.qtPack; i++) {
            Pack pack = container.removePack(container.packs[i].number);
            System.out.println("Remove " + pack.name+" - ID: "+pack.number);
        }
    }
} 

Main 的输出

--- PACK IN CONTAINER ---
Pack ID:1 - Name: A
Pack ID:2 - Name: B
Pack ID:3 - Name: C
Pack ID:4 - Name: D
Pack ID:5 - Name: E

--- REMOVE PACK ---
Remove A - ID: 1
Remove C - ID: 3
Remove E - ID: 5

有什么建议吗?

最佳答案

您可以将它们从末尾删除...

    for (int i = container.qtPack-1; i >= 0; i--) {
        Pack pack = container.removePack(container.packs[i].number);
        System.out.println("Remove " + pack.name+" - ID: "+pack.number);
    }

...或者始终删除第一个元素:

    int count = container.qtPack;
    for (int i = 0; i < count; i++) {
        Pack pack = container.removePack(container.packs[0].number);
        System.out.println("Remove " + pack.name+" - ID: "+pack.number);
    }

这是因为通过更改数组,您将在每次迭代中更改条件(此处 container.packscontainer.qtPack )。请记住循环条件 i < container.qtPack每次迭代都会进行评估。

关于java - Java中删除数组中的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41534566/

相关文章:

java - 对于银行应用程序来说,SQL 事务或 Java 端事务哪个更好?

java - 将反射的枚举传递给 method.invoke java

java - 我使用 IntStream 和 forEach 创建整数列表的方法有什么问题?

java - spring中将@Controller替换为@RestController的效果

java - Android NDK 性能优于常规 Java 代码

java - 如何防止JLabel位置重置?

java - 通用返回类型和 lambda 函数参数

java - Gson 抛出 MalformedJsonException 和其他异常

java - 为什么有时检测不到这些隐藏的静态方法?

java - Netbeans/java : Could not find or load main class library