如果number在数组中,则删除索引

时间:2011-12-10 14:22:44

标签: java arrays

我需要将数字与数组进行比较,如果数字在数组中,则返回索引并从列表中删除它。什么是禁食的java方法呢?

谢谢!

6 个答案:

答案 0 :(得分:1)

好吧,您应该使用ArrayList而不是数组,这样您就可以轻松删除索引,因为List是动态的。

然后,您应该使用for循环来循环ArrayList的每个索引并检查它是否等于数字;删除当前索引!

在开始循环之前,您始终可以使用Array方法将ArrayList转换为asList,然后在完成后使用ArrayList.toArray()将其更改回来!< / p>

答案 1 :(得分:1)

您可以尝试下面的内容

if(list.contains(element)){
  index = list.indexOf(element);
  list.remove(index);
}

这不需要任何迭代或循环。

答案 2 :(得分:1)

为什么不尝试java.util.LinkedList?使用它们,您可以在O(1)时间内删除元素。

似乎要搜索该号码,您将在列表中循环。那将是O(n)时间。

否则,您可以使用类似Quicksort的内容对数组进行排序,然后对值执行Binary Search并获取索引。然后,您可以使用array = ArrayUtils.removeElement(array, element)将其删除,其中element是您要搜索的数字。

编辑实际上,第二种想法,第一种方法更好。使用第二种方法,运行时间略长。

希望这有帮助!

答案 3 :(得分:1)

添加到@ dku.rajkumar的帖子,如果你坚持认为它是一个数组,你可以沿着这条线做点什么:

Integer[] array = {1, 3, 7, 9, 13, 18, 25, 27, 35, 38, 41, 44, 46, 51, 68, 86, 99};
List<Integer> list = Arrays.asList(array);
int index = 0;
if(list.contains(value)){
    index = list.indexOf(value);
    list.remove(index);
    array = list.toArray(array);
}

数组必须是一个Integer []而不是一个int [],因为asList()使用泛型并且int可以在Integer可以传递时无法传递。如果它是int []那么你最终会得到List而不是List。

答案 4 :(得分:0)

如果您使用的是数组,则需要创建一个新数组并将未删除的值复制到该新数组中。原因是无法修改数组的大小。

您最好使用List的实施,例如ArrayList。那些可以改变它们的大小而不用担心它的细节。

答案 5 :(得分:0)

您可以通过将该数组放入List并将该列表放入Array列表中来删除数组的值,如下面的代码所示:

Integer[] intArray = {1, 2, 3, 42}; // cannot use int[] here
        List<Integer> intList = Arrays.asList(intArray);

        ArrayList<Integer> aa= new ArrayList<Integer>(intList);

        Iterator<Integer> it1 = aa.iterator();
        while(it1.hasNext())
        {
            System.out.println(it1.next());

        }

        aa.remove(0);

        System.out.println("-------------------------------------");

        for(Integer a3:aa)
        {
            System.out.println(a3);

        }

        intArray=aa.toArray(new Integer[aa.size()]);

        System.out.println("-------------------------------------");


        for(Integer a4:intArray)
        {
            System.out.println(a4);

        }