Java 将新值添加到现有数组的开头
我想要一个向数组添加值的方法,从数组的开头开始(如果数组为空)或添加到结尾(如果它有值) 如果我运行以下命令:Java 将新值添加到现有数组的开头,java,arrays,Java,Arrays,我想要一个向数组添加值的方法,从数组的开头开始(如果数组为空)或添加到结尾(如果它有值) 如果我运行以下命令: List1.add(task1); List1.add(task2); 我得到以下输出: => null => null => null => null => null Task "TaskOne" Task "TaskTwo" 但是,我希望得到以下输出: Task 1 Task 2 所以,问题是——如何让事情以我上面描述的方式运作 注意:我不能使
List1.add(task1);
List1.add(task2);
我得到以下输出:
=> null
=> null
=> null
=> null
=> null
Task "TaskOne"
Task "TaskTwo"
但是,我希望得到以下输出:
Task 1
Task 2
所以,问题是——如何让事情以我上面描述的方式运作
注意:我不能使用
java.lang.util.List
或ArrayList
检查第一个索引是否为空,如果是,覆盖第一个索引,如果不是,覆盖下一个空索引
在增加数组大小之前,应该检查所有索引是否都是非空的。您的列表
类应该有一个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;
}
}
}
试试这个。将数组也传递到方法中
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;
}
如果需要,您只需要增加阵列。检查是否有任何引用已经为null,如果是,则添加它,否则将其增长1,然后将其添加到末尾
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;
}
}
公共作废添加(任务){
布尔加法=假;
对于(int i=0;i
您正在声明一个任务[5]
数组,这意味着您在声明时有5个对任务的空引用。你的逻辑是将所有这些引用复制到一个新的任务[6]
数组中,因为你说的是长度+1,然后将新任务添加到末尾。我想“我不能使用列表”是因为这是某种研究项目,你不被允许?(这是重新实现标准库中已经存在的东西的唯一有效理由)你说得对,研究项目。@Jonny Henly Maaan,我真的爱你。非常感谢你,你是最棒的。我希望我能自己写,但我会尽我最大的努力从头到尾理解它,并复制它,因为对你们来说,我有一些工作要做。真的,谢谢还不够,我以为我永远都不知道怎么解决它,但你是我的救星!祝你们一切顺利。很高兴我能提供帮助。我非常感谢,不幸的是,我不允许向add函数添加新参数。老鼠。。。按照@Orin2005的答案去做,它看起来很可靠!=>null=>null=>null=>null=>null=>null任务“TaskTwo”这就是我得到的。
java.lang.Object@106d69c
java.lang.Object@52e922
null
null
null
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;
}
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;
}
}