关于删除数组中所有的元素e

来源:2-5 包含,搜索和删除

cngaara

2019-09-07

首先要找到元素e在数组中的所有索引

// 找到数组中所有元素e的索引
    public Array<Integer> findAll(E e){

        Array<Integer> ret = new Array<>();
        for(int i = 0; i < size; i ++){
            if(data[i].equals(e))
                ret.addLast(i);
        }

        return ret;
    }

然后逐个索引,调用remove()函数删除。

// 从数组中删除所有元素e
    public void removeAllElement(E e){

        Array<Integer> indexs = indexs = findAll(e);
        if(indexs.size != 0)
            for(int i = 0; i < indexs.size; i ++){
                remove(indexs.get(i));
                size --;
            }
    }

但是测试的时候,会报错,debug看了一下,应该是indexs对象的data属性,将原来数组的data属性覆盖了。不知道怎么办才好。

写回答

1回答

liuyubobobo

2019-09-07

比如你找到的索引是 1, 2, 3


但是,当你删除去掉了索引1的元素以后,2,3的索引会改变的啊。


再想想看?


继续加油!:)

0
1
cngaara
啊,我忘了考虑这个了,谢谢bobo老师。 修改过之后。 public void removeAllElement(E e){ Array index = findAll(e); if(index.size != 0) for (int i = 0; i < index.size; i++) { index.set(i, index.get(i) - i); remove(index.get(i)); } } 但是我发现问答区已经有人写出了更好的方法了。
2019-09-07
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程