Java 如何删除ArrayList的项并更新元素的索引
我有一个Java 如何删除ArrayList的项并更新元素的索引,java,arrays,arraylist,indexing,Java,Arrays,Arraylist,Indexing,我有一个ArrayList存储名为QuestionText的对象。这是下面对象的类 package me.bigbaddevil7.QnA; public class QuestionText { int index; String username; String message; public QuestionText(int index, String username, String message){ this.index = ind
ArrayList
存储名为QuestionText
的对象。这是下面对象的类
package me.bigbaddevil7.QnA;
public class QuestionText {
int index;
String username;
String message;
public QuestionText(int index, String username, String message){
this.index = index;
this.username = username;
this.message = message;
}
public void setIndex(int i){
index = i;
}
public void setUsername(String user){
username = user;
}
public void setMessage(String msg){
message = msg;
}
public int getIndex(){
return index;
}
public String getUsername(){
return username;
}
public String getMessage(){
return message;
}
}
我遇到的这个问题是,所有问题对象都将存储在一个ArrayList中,以后可以访问和操作它,我希望索引能够正确更新
例如,我们添加了“艾比”、“鲍勃”、“卡尔”。相应的索引为0,1,2。如果我做了一个简单的删除(1)。然后是“Abby”,“Carl”,显示的索引是0,2,我想要0,1。使用getIndex()显示索引
我研究了数组如何处理删除项并将数组复制到新项的问题,但由于这种情况可能会发生很多次,我不知道这是否是解决此问题的最佳方法。您正在处理此问题,就好像索引是
QuestionText
类的属性一样。然而,情况并非如此。更改ArrayList
中问题的顺序不应影响QuestionText
对象。索引是其在ArrayList
中位置的结果;这不是问题的本质部分
我将从
QuestionText
类中完全删除index
变量和相关的getter/setter。索引取决于ArrayList
类。与数组一样,这些索引是固定的,从0
开始。使用数组列表中的索引作为替代。您正在处理这个问题,就像索引是问题文本
类的属性一样。然而,情况并非如此。更改ArrayList
中问题的顺序不应影响QuestionText
对象。索引是其在ArrayList
中位置的结果;这不是问题的本质部分
我将从QuestionText
类中完全删除index
变量和相关的getter/setter。索引取决于ArrayList
类。与数组一样,这些索引是固定的,从0
开始。使用数组列表中的索引作为替代。您正在处理这个问题,就像索引是问题文本
类的属性一样。然而,情况并非如此。更改ArrayList
中问题的顺序不应影响QuestionText
对象。索引是其在ArrayList
中位置的结果;这不是问题的本质部分
我将从QuestionText
类中完全删除index
变量和相关的getter/setter。索引取决于ArrayList
类。与数组一样,这些索引是固定的,从0
开始。使用数组列表中的索引作为替代。您正在处理这个问题,就像索引是问题文本
类的属性一样。然而,情况并非如此。更改ArrayList
中问题的顺序不应影响QuestionText
对象。索引是其在ArrayList
中位置的结果;这不是问题的本质部分
我将从QuestionText
类中完全删除index
变量和相关的getter/setter。索引取决于ArrayList
类。与数组一样,这些索引是固定的,从0
开始。改为使用数组列表中的索引。为什么需要在课堂上记录它的索引?你不能随时调用list.indexOf(QuestionText)吗?由于索引容易更改,因此存储易于更改的值不是一个好主意。无论何时修改列表,都必须在修改后更新每个元素的索引
为了回答你的问题,我将把你的二传手改为
public void setIndex(){
index = list.indexOf(this);
}
你必须在课堂上保留对你的列表的引用。同样,无论何时修改列表,都必须对修改后的元素后的所有元素调用setIndex
另一种可能更好的方法是让你的二传手保持原样。但是,无论何时修改arraylist,都必须执行类似的操作
for(int i = (index of modified element);i<list.length();i++){
list.get(i).setIndex(i);
}
for(int i=(修改元素的索引);i为什么需要在类中保留它的索引记录?难道不能调用list.indexOf(QuestionText)无论何时需要它?由于索引容易更改,因此存储易于更改的值不是一个好主意。无论何时修改列表,都必须在修改后更新每个元素的索引
为了回答你的问题,我将把你的二传手改为
public void setIndex(){
index = list.indexOf(this);
}
你必须在类中保留对列表的引用。同样,每当你修改列表时,你必须对修改后的所有元素调用setIndex
另一种可能更好的方法是保持setter的原样
for(int i = (index of modified element);i<list.length();i++){
list.get(i).setIndex(i);
}
for(int i=(修改元素的索引);i为什么需要在类中保留它的索引记录?难道不能调用list.indexOf(QuestionText)无论何时需要它?由于索引容易更改,因此存储易于更改的值不是一个好主意。无论何时修改列表,都必须在修改后更新每个元素的索引
为了回答你的问题,我将把你的二传手改为
public void setIndex(){
index = list.indexOf(this);
}
你必须在类中保留对列表的引用。同样,每当你修改列表时,你必须对修改后的所有元素调用setIndex
另一种可能更好的方法是让二传手保持原样