将新值添加到现有数组的开头

时间:2016-06-09 17:25:47

标签: java arrays

我想要一个向数组添加值的方法,从它的开头(如果数组为空)或添加到结尾(如果它有值)。

public void add(Task task) {
    Task[] newTaskList = new Task[taskList.length + 1];

    for (int i = 0; i < taskList.length; i++) {
        newTaskList[i] = taskList[i];
    }

    newTaskList[newTaskList.length - 1] = task;
    taskList = newTaskList;
} 

我将我的数组声明为:

Task[] taskList = new Task[5];

如果我运行以下内容:

List1.add(task1);
List1.add(task2);

我得到以下输出:

=> null
=> null 
=> null
=> null
=> null
Task "TaskOne"
Task "TaskTwo"

但是,我想要以下输出:

Task 1
Task 2

所以,问题是 - 如何以我上面描述的方式使事情发挥作用。

注意:我无法使用java.lang.util.ListArrayList

3 个答案:

答案 0 :(得分:1)

检查第一个索引是否为null,如果是,则覆盖第一个索引,如果不覆盖下一个空索引。

在增加数组大小之前,应检查所有索引是否为非null。您的List类应该有一个int来跟踪基础数组中的非空索引的数量 - 您可以调用此变量size

或者您可以使用ArrayList因为它已经完成了您尝试做的事情,只会更好。为什么重新发明轮子?

<强>更新

以下是一些有效的代码:

class List {
    static Object taskList[] = new Object[5];
    boolean extraSpace = false;

    public static void main (String[] args) throws java.lang.Exception {
        List list = new List();

        list.add(new Object());
        list.add(new Object());

        for(int i = 0; i < taskList.length; i++) {
            System.out.println(taskList[i]);
        }
    }

    // Constructor
    public List() {
        for(int i = 0; i < taskList.length; i++) {
            if(taskList[i] == null) {
                extraSpace = true;
                break;
            }
        }
    }

    public void add(Object task) {
        // check for any null indexes, if found fill them
        if(extraSpace) {
            boolean added = false;
            for(int i = 0; i < taskList.length; i++) {
                if(taskList[i] == null) {
                    if(!added) {
                        taskList[i] = task;
                        added = true;
                    } else {
                        extraSpace = true;
                        break;
                    }
                }
                extraSpace = false;
            }
        } else {
           // if no null indexes then create new array with +1 length, then
           // copy old array to new adding new task in the process.
           Object[] newTaskList = new Object[taskList.length + 1];
           for(int i = 0; i < taskList.length; i++) {
               newTaskList[i] = taskList[i];
           }
           newTaskList[newTaskList.length - 1] = task;
           taskList = newTaskList;
        }
    }
}

输出:

java.lang.Object@106d69c
java.lang.Object@52e922
null
null
null

答案 1 :(得分:0)

试试这个。将数组传递给方法。

public void add(Task task, Task[] taskList){
  for(int i = 0; i = taskList.length;i++){
      if(taskList[i] == null){
          taskList[i] = task;
           return;
      }
   }
   Task[] newTaskList = new Task[taskList.length+1];
   newTaskList[taskList.length] = task;
   taskList = newTaskList;
 } 

答案 2 :(得分:0)

如果需要,您只需要增长数组。检查是否有任何引用已经为null,如果它们是添加它,否则将它增加一个,然后将其添加到最后。

public void add(Task task) {
    boolean added = false;
    for(int i = 0; i < taskList.length; i++)
    {
        if(taskList[i] == null) {
            taskList[i] = task;
            added = true;
        }
    }

    if(!added) {
       //still not added, no null references, add to end of a newly declared array.
       Task[] newTaskList = new Task[taskList.length + 1];
       newTaskList[newTaskList.length -1] = task;
       taskList = newTaskList;
    }
}