如何使用java编写remove方法?
我需要删除该值。 *见插入方法-*如何使用java编写remove方法?,java,arrays,string,Java,Arrays,String,我需要删除该值。 *见插入方法-* @Override public void insertFaculty(Faculty e) { setFaculty(e); list.add(e.getname()); list.add(e.getfid()); list.add(Double.toString(e.getsalary())); System.out.println("\n\nFaculty inserted sucessfu
@Override
public void insertFaculty(Faculty e) {
setFaculty(e);
list.add(e.getname());
list.add(e.getfid());
list.add(Double.toString(e.getsalary()));
System.out.println("\n\nFaculty inserted sucessfully.");
}
现在我需要删除插入方法中输入的值
*我尝试了删除的方法,但不起作用(⊙_⊙;) *
@覆盖
公共行政学院(e学院){
int i;
对于(i=1;i考虑当你移除i-1
时,所有东西都会移动1。因此,以前位于i
的东西现在位于i-1
。如果你移除该东西,最初位于i+1
的东西将位于i-1
因此,您可以删除i-1
3次:
// Or use a for loop.
list.remove(i-1);
list.remove(i-1);
list.remove(i-1);
或与移除顺序相反:
list.remove(i+1);
list.remove(i);
list.remove(i-1);
或清除子列表:
list.subList(i-1, i+2).clear();
不要忘了将i
减量1,这样您将在下一次迭代中检查i
处的“新”内容(如果您只需要找到一个内容,则中断)
综上所述,看起来您正在将不相关类型的相关数据扔到同一个列表中
您也在检查列表中的所有元素,但只有三分之一是id。首先,您可以只检查元素1、4、7等。我不知道id的类型,但通常您可以在“非id位置”(0、2、3、5等)中找到与id相等的值,删除该元素和相邻元素会损坏列表
与其这样做,不如创建一个类来保存你的三个字段。创建一个实例,并将其添加到列表中(或者直接存储你的Faculty
对象)。在索引处删除i
两次和i-1
一次,将删除id
、salary
和name
第一次删除后,索引i+1
处的元素将是i
并且将保持i-1
list.remove(i);
list.remove(i);
list.remove(i - 1);
简单的答案是List.remove将所有元素移回,以填补执行List.remove(i-1)
时留下的漏洞,因此解决方法是调用List.remove(i-1)三次,而不是使用i-1、i和i+1调用它
但您确实应该将Faculty对象插入列表,而不是单独插入其三个字段。在insertFaculty方法中使用泛型list和list.add(e)。然后在removeFaculty方法中调用list.remove
@Override
public void removeFaculty(Faculty e) {
setFaculty(e);
list.remove(e.getname());
list.remove(e.getfid());
list.remove(Double.toString(e.getsalary()));
System.out.println("\n\nFaculty Removed sucessfully.");
}
您可以使用remove
方法列表进行删除。您需要传递要删除的元素
最好使用list
而不是list
List List=new ArrayList();
希望,这将对您有所帮助。您的代码中存在不同的逻辑错误:
你的指数不应该增加1,而应该增加3
从列表中删除项目时,不必增加索引
请尝试以下代码:
@Override
public void removeFaculty(Faculty e) {
int i = 1;
while(i<list.size()) {
System.out.println(list.get(i));
if(e.fid.equals(list.get(i))) {
System.out.println("Match found.");
list.remove(i-1);
list.remove(i-1);
list.remove(i-1);
} else {
i+=3;
}
}
}
@覆盖
公共行政学院(e学院){
int i=1;
而
如果列表中只有3个元素,则列表大小应为3
方法返回列表中指定位置的元素。
但是您没有定义列表的类型。因此不知道返回的类型。我假设类型是Object
如果只有一个列表,则无需调用循环
将列表用作list
而不是list
为什么要创建这样的列表?为什么不使用列表?在遍历容器时从容器中删除通常是一种不好的做法。典型的方法是确定哪些元素需要在一个循环中删除,然后在第二个循环中删除。将已识别的元素放在另一个容器中。1与2无关,因为id位于elements 1、4、7等。你听说过计算效率吗?;)为什么你确定列表中只有三个元素,方法insertFaculty可能会被多次调用是的。他的代码中有一点混乱。如果他需要这样,他可以使用列表
List<Faculty> list= new ArrayList<Faculty>();
@Override
public void removeFaculty(Faculty e) {
int i = 1;
while(i<list.size()) {
System.out.println(list.get(i));
if(e.fid.equals(list.get(i))) {
System.out.println("Match found.");
list.remove(i-1);
list.remove(i-1);
list.remove(i-1);
} else {
i+=3;
}
}
}
@Override
public void removeFaculty(Faculty e) {
System.out.println(list.get(1));
if(e.fid.equals(list.get(1)) {
System.out.println("Match found .");
list.subList(0, list.size()-1).clear();
}
else {
System.out.println("Not found .");
}
}