如何从Java中删除数组中的元素?我如何跳过空数组元素?

时间:2013-06-16 18:35:05

标签: java arrays null

我正在完成一个类赋值,我不知道如何从数组中删除一个元素。我已经阅读了使用ArrayUtils或将数组转换为链表的建议。我还是Java的新手,所以我不确定我是否真的需要做这样的事情,或者我是否忽略了一些更简单的事情。我还需要完成一些需要跳过数组中所有null元素的进程。我没有一位优秀的教授,而且沟通尝试也是徒劳的,所以我希望有人可以提供帮助。我的代码如下。相关位从“public void remove”开始。我只是在这个课程中发布所有代码,以更全面地了解正在发生的事情:

public class WatchCollection
{   

private Watch watches[];    // an array of references to Watch objects
                            // watches[i] == null if there is no watch in position i
private int num;            // size of the array

private void init(int numberOfWatches) {
    watches = new Watch[numberOfWatches];
    for (int i=0;i<numberOfWatches;++i)
    {
        watches[i] = null;
    }
    num = numberOfWatches;
}
public WatchCollection(int numberOfWatches)
{   
    init(numberOfWatches);
}
public WatchCollection (Watch  w1)
{
    init(1);
    add(w1);            
}

// TODO Define WatchCollection (Watch w1, Watch w2) constructor
public WatchCollection (Watch w1, Watch w2)
{
}

// TODO Define WatchCollection (Watch w1, Watch w2, Watch w3) constructor
public WatchCollection (Watch w1, Watch w2, Watch w3)
{
}

public void add    ( Watch w )
{
    for(int i=0;i<num;++i)
    {
        if (watches[i]==null)
        {
            watches[i]=w;
            return;
        }
    }
}
public void remove ( Watch w )
{
    // TODO Write a code that removes Watch w if it is in the array

}

public int size()
{
    // TODO Write a code that returns actual number of watches, skip all null array elements
}

public Watch at( int index)
{
    // TODO Write a code that returns a watch with the specified index (skip all null array elements)
    // TODO Throw an exception if the index is < 0 or >= actual number of watches
    // For example, if the array contains w1 w2 null w3 w4
    // index 0 -> w1
    // index 1 -> w2
    // index 2 -> w3
    // index 3 -> w4
    // index 4 -> an exception

}

public String toString()
{
    String str="{\n";

    int index=0;
    for(int i=0;i<num;++i)
    {
        if (watches[i]!=null)
        {
            str+=" " +index++ + ": " +watches[i] + "\n";
        }
    }
    str+=" }";
    return str;      
 }
}

5 个答案:

答案 0 :(得分:2)

ArrayList是一个内置类,提供对元素的索引访问,删除任意元素的能力以及动态扩展。

答案 1 :(得分:2)

由于这是一个类赋值,我只提供算法在数组中实现remove方法(假设这是一个算法过程):

function remove (Element element)
    int index <- -1
    for i <- 0 to num - 1
        if (array[i] is equals to element) then
            index <- i
            break
        end if
    end for
    if index > -1 then
        for i <- index to num - 2
            array[i] <- array[i+1]
        end for
        num <- num - 1
    end if
end function

如果这是关于Java编程的练习,最好声明一个ArrayList并使用它,因为它已经为你实现了所有这些方法。

答案 2 :(得分:1)

在没有给出答案的情况下,以下是您可以随时改进的方法。

public class WatchCollection {
    private Watch watches[];    // an array of references to Watch objects
    // watches[i] == null if there is no watch in position i
    private int num = 0;        // size of the array used.

    public WatchCollection(int numberOfWatches) {
        watches = new Watch[numberOfWatches];
    }

    public WatchCollection(Watch w1) {
        this(1);
        add(w1);
    }

    public void add(Watch w) {
        if (watches.length == num + 1)
            watches = Arrays.copyOf(watches, num*2);
        watches[num++] = w;
    }

您应尽量使解决方案尽可能简单。

答案 3 :(得分:0)

这里你想要的只是处理Watch对象,所以你不需要使用数组。

使用ArrayList

是开展工作的最佳方式。

该类具有访问索引元素,删除索引元素,数组动态扩展等方法。

该链接指向ArrayList类的官方文档。

答案 4 :(得分:0)

使用Arraylist而不是数组。如果您已有数组,请将其转换为A