Java 如何对对象数组使用ArrayUtils,它不需要';t删除数组的内容

Java 如何对对象数组使用ArrayUtils,它不需要';t删除数组的内容,java,arrays,Java,Arrays,如何删除对象数组的内容。如果有其他方法删除对象数组的内容,请不要共享 import java.util.Arrays; import java.util.Scanner; import org.apache.commons.lang3.ArrayUtils; public class Testing { public static void deleteItem(ItemTracker[] listItems) { System.out.println("Which item

如何删除对象数组的内容。如果有其他方法删除对象数组的内容,请不要共享

import java.util.Arrays;
import java.util.Scanner;

import org.apache.commons.lang3.ArrayUtils;

public class Testing {

  public static void deleteItem(ItemTracker[] listItems) {
    System.out.println("Which item you want to delete? ");
    for(int i=0; i < listItems.length; i++) {
            if(input.equalsIgnoreCase("Quantity")) {
                // Some Code
            } else if(input.equalsIgnoreCase("Something"){
                ArrayUtils.remove(listItems, i); //  This is the part where it should delete .. but it doesnt delete. 
            } 
            break;
        }
      }
    }
导入java.util.array;
导入java.util.Scanner;
导入org.apache.commons.lang3.ArrayUtils;
公共类测试{
公共静态void deleteItem(ItemTracker[]listItems){
System.out.println(“要删除哪个项目?”);
for(int i=0;i

此方法返回具有相同输入元素的新数组 数组,但指定位置上的元素除外。组件类型 返回数组的值始终与输入数组的值相同

所以,你应该这样使用它

listItems = ArrayUtils.remove(listItems, i);
注意

  • 这里,我们将返回的数组分配给当前的
    listItem
  • 由于此方法不更改实际数组,但在删除后返回更改的数组,与
    #replace
    方法适用于
    字符串
是的。我同意,我没有达到你的方法的目的 因为我更专注于元素的移除。抱歉!! 因为这实际上不会更改
列表项
,您需要
返回包含更改的新数组

改变这个

ArrayUtils.remove(listItems, i);

如中所示,该方法不会更改参数
listItems
,而是返回包含其余元素的新数组

编辑

您还需要将删除方法更改为

public static ItemTracker[] deleteItem(ItemTracker[] listItems) {
    //..
}

因此,您可以返回新数组和剩余元素。

存储生成的数组

它不会更改原始数组对象

编辑:但要使用此方法,您需要更改方法的返回类型

public static ItemTracker[] deleteItem(ItemTracker[] listItems){
    System.out.println("Which item you want to delete? ");
    for(int i=0; i < listItems.length; i++) {
            if(input.equalsIgnoreCase("Quantity")) {
                // Some Code
            } else if(input.equalsIgnoreCase("Something"){
                listItems = ArrayUtils.remove(listItems, i); //  This is the part where it should delete .. but it doesnt delete. 
            } 
            break;
        }
      return listItems;
      }
publicstaticitemtracker[]deleteItem(ItemTracker[]listItems){
System.out.println(“要删除哪个项目?”);
for(int i=0;i
在您的情况下,
数组的用法是不正确和冗余的。您可以用下一种方法删除元素:

// ...  
listItems[i] = null;
// array will looks like [o1, o2, null, o3, o4, ...]
// ...    

没有其他方法可以不更改方法的返回类型

,而无需附加库和临时列表:

Element arrayToRemoveFrom[];
Element toRemove; // should be known already

ArrayList<Element> tmpList = new ArrayList<Element>(Arrays.asList(arrayToRemoveFrom));
tmpList.remove(toRemove);
// any other code processing and removing elements
arrayToRemoveFrom = tmpList.toArray(new Arrays[tmlList.size()]);
元素数组从[]移除;
元素toRemove;//应该已经知道
ArrayList tmpList=新的ArrayList(Arrays.asList(arrayToRemoveFrom));
t拆卸(t拆卸);
//任何其他代码处理和删除元素
arrayToRemoveFrom=tmpList.toArray(新数组[tmlList.size()]);
类数组
{
公共静态void main(字符串[]args)
{
双[]数={6.0,4.4,1.9,2.9,3.4,3.5};
java.util.array.sort(数字);
系统输出打印(“升序=”);
for(int i=0;i=0;i--)
系统输出打印(数字[i]+“”);
}
}

此解决方案仅以相反的顺序显示,但可以更改为使用相同的循环对数组重新排序。

不确定为什么对3个正确答案进行了否决票…@CoverosGene老实说,否决票是正确的,因为每个anwser(Ilyas答案除外)都忘记提及调用
ArrayUtils.remove()
“单独”这对他没有帮助。他还需要更改返回新数组的方法。这不会删除条目。如果“有人”在不检查空元素的情况下迭代该数组。@Tom在他的情况下没有其他方法。正确的解决方案是返回新数组,而不是从现有数组中删除元素。这确实是一个很好的观点。我已经更新了我的答案。您的版本应该适用于。这个答案是正确的。记住,Java中的数组已经修复了大小,我们不能只删除它的一个元素,我们需要返回
初始大小-1
的新数组。这是不可能的,因为此方法不返回值。此赋值是完全无用的-它将本地方法
列表项
变量的引用更改为新数组,同时方法使用者仍将有对未修改数组的引用,不是吗?@zvdh我想你对引用感到困惑。在你的编译器中试试这段代码。
String x=“abc”;x=x+“def”
;你同意这个例子吗。你意识到这个赋值对初始数组无效吗?@DeepakTiwari,你想解释什么?你的方法的问题是,实际上它根本不会改变初始数组,你不需要修改它,你把对这个数组的引用重新赋值给另一个新数组。@NaufalYahaya,可能是还有一个错误,我不知道。我们给了你解决确切问题的建议。现在轮到你了,试着调试方法。这一堆代码不是自给自足的,我确信当前的问题与原始问题无关。祝你好运!这个任务会做什么?@zvdh这是使用
ArrayUtils ,但你是对的,如果OP不改变他的
deleteItem
方法,这对他没有多大帮助。@Tom
// ...  
listItems[i] = null;
// array will looks like [o1, o2, null, o3, o4, ...]
// ...    
Element arrayToRemoveFrom[];
Element toRemove; // should be known already

ArrayList<Element> tmpList = new ArrayList<Element>(Arrays.asList(arrayToRemoveFrom));
tmpList.remove(toRemove);
// any other code processing and removing elements
arrayToRemoveFrom = tmpList.toArray(new Arrays[tmlList.size()]);
class Arrays
{
    public static void main(String[] args)
    {
      double[] numbers = {6.0, 4.4, 1.9, 2.9, 3.4, 3.5};
      java.util.Arrays.sort(numbers);

      System.out.print("Ascending order= ");
      for (int i = 0; i < numbers.length; i++)
        System.out.print(numbers[i] + " ");

      System.out.println();

      System.out.print("Decending order= ");
      for (int i = numbers.length -1; i >= 0; i--)
        System.out.print(numbers[i] + " ");

     }

}