为了账号安全,请及时绑定邮箱和手机立即绑定

从数组(Java)中删除元素

从数组(Java)中删除元素

呼啦一阵风 2019-07-04 16:25:19
从数组(Java)中删除元素有什么快速(美观)的方法从Java数组中删除元素吗?
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

你的问题不太清楚。从你自己的回答中,我能更清楚地看出你想做什么:

public static String[] removeElements(String[] input, String deleteMe) {
    List result = new LinkedList();

    for(String item : input)
        if(!deleteMe.equals(item))
            result.add(item);

    return result.toArray(input);}

注:这是未经测试的。错误检查作为练习留给读者(如果输入或DeleteMe为空,我会抛出IllegalArgumentException;空列表对空列表输入没有意义。从数组中删除空字符串可能是有意义的,但我也会将其保留为练习;目前,如果DeleteMe为null,它将在DeleteMe上调用等于时抛出NPE。)

我在这里做的选择:

我用的是LinkedList。迭代应该同样快,如果最终删除了很多元素,就可以避免调整大小,或者分配太大的列表。您可以使用ArrayList,并将初始大小设置为输入的长度。这可能不会有太大的区别。


查看完整回答
反对 回复 2019-07-04
?
翻阅古今

TA贡献1780条经验 获得超5个赞

最好的选择是使用集合,但如果出于某种原因,请使用arraycopy..您可以使用它在稍微不同的偏移量中复制到同一个数组。

例如:

public void removeElement(Object[] arr, int removedIdx) {
    System.arraycopy(arr, removedIdx + 1, arr, removedIdx, arr.length - 1 - removedIdx);}

编辑回应评论(tl;dr):

这不是另一种好方法,它实际上是唯一可以接受的方法-任何允许这种功能的工具(比如Java.ArrayList或Apache utils)都会在幕后使用这个方法。而且,你真的应该使用ArrayList(或者链接列表,如果你删除了很多),所以这不应该是一个问题,除非你做家庭作业。

要分配一个集合(创建一个新的数组),然后删除一个元素(集合将使用arrayCopy完成),然后对其调用toArray(创建第二个新数组),因为每次删除都会使我们意识到,它不是一个优化问题,而是严重的错误编程。

假设您有一个数组,例如,100 MB的RAM。现在,您需要迭代它并删除20个元素。

试试看.。

我知道你认为它不会那么大,或者如果你同时删除了那么多,你会对它进行不同的编码,但我已经修正了很多这样的假设。


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 6085 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信