猿问

从数组(Java)中删除元素

从数组(Java)中删除元素

有什么快速(美观)的方法从Java数组中删除元素吗?



呼啦一阵风
浏览 6086回答 3
3回答

海绵宝宝撒

你的问题不太清楚。从你自己的回答中,我能更清楚地看出你想做什么: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,并将初始大小设置为输入的长度。这可能不会有太大的区别。

翻阅古今

最好的选择是使用集合,但如果出于某种原因,请使用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个元素。试试看.。我知道你认为它不会那么大,或者如果你同时删除了那么多,你会对它进行不同的编码,但我已经修正了很多这样的假设。
随时随地看视频慕课网APP

相关分类

Java
我要回答