如题,有两个List:
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list1.add("5");
list2.add("1");
list2.add("3");
list2.add("5");
现在要将list1中的1,3,5删除,要求效率越高越好。
我自己写了个,感觉效率很差!
public static void main(String[] args) {
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list1.add("5");
list2.add("1");
list2.add("3");
list2.add("5");
boolean restart = false;
int i =0;
out:
for( ;i<list1.size();){
int j=0;
for(;j<list2.size();j++){
if(list1.get(i).equals(list2.get(j))){
list1.remove(list1.get(i));
restart = true;
break;
}
}
if(j == list2.size()){
restart = false;
}
if(restart){
i = 0;
continue out;
}else{
i++;
}
}
}
------解决思路----------------------
重写一下Person类的equals方法,改成当和其他类比较时,只要name相同就返回true.
再同样的removeAll应该就可以了... LZ不妨试试.
------解决思路----------------------
list3=list2.clone();
Iterator<Persion>iter1=list1.iterator();
while(iter.hasNext()){
Persion p=iter.next();
for(Iterator<Teacher>iter2=list3.iterator();iter2.hasNext();){
if(p.getName().equals(iter2.next().getName())){
iter.remove();
iter2.remove();
break;
}
}
}
我这个例子肯定没有7楼的效率高,但7楼的方式要求重写Persion的equals和hashCode方法。
建议你将Persion作为Teacher的父类,比对时不应只考虑姓名,毕竟有重名的可能。
------解决思路----------------------
是不是可以这样写
package csdn;
public class Person {
private String name = "";
private String age = "";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Person(String name, String age){
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o){
if (null == o)
return false;
if (!(o instanceof Person))
return false;
Person p = (Person)o;
if (this.name.equals(p.getName()) && this.age.equals(p.getAge()))
return true;
return false;
}
@Override
public String toString(){
return this.name + "-" + this.age;
}
}
package csdn;
public class Teacher extends Person{
private String type;
public Teacher(String name, String age, String type) {
super(name, age);
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package csdn;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Person> list1 = new ArrayList<Person>();
list1.add(new Person("1", "21"));
list1.add(new Person("2", "22"));
list1.add(new Person("3", "23"));
list1.add(new Person("4", "24"));
list1.add(new Person("5", "25"));
List<Person> list2 = new ArrayList<Person>();
list2.add(new Teacher("1", "21", "语文"));
list2.add(new Teacher("3", "23", "数学"));
list2.add(new Teacher("5", "25", "英语"));
list1.removeAll(list2);
for(Person per: list1){
System.out.println(per);
}
}
}