上干货~
有一道题,他是这样子的,
如果我一个集合中有重复的元素, 那么请问,我怎么设计代码.能拿到一个没有重复的集合呢???
思路:
在定义一个集合,这个集合中,放的就是 去重过后的元素,里面没有重复的 元素.
整一个循环出来,三种方法你随便写,
然后在这个 集合中,我每次 对拿进来的元素进行判断,看你是否包含在我 当前集合中,,
如果包含,我就 list.add(); 来添加你, 如果我中间有了,那就不要你了'
--------------------------------------------------------------------------------------------------------------手动分割线.
代码区.
测试类代码:
import java.util.ArrayList;
import java.util.List;
import com.heima.bean.Person;
public class 第二题 {
public static void main(String[] args) {
List <Person>list1 = new ArrayList<Person>();
list1.add(new Person("漩涡鸣人",18));
list1.add(new Person("漩涡鸣人",18));
list1.add(new Person("日向雏田",16));
list1.add(new Person("宇智波佐助",19));
list1.add(new Person("宇智波佐助",19));
list1.add(new Person("宇智波佐助",19));
list1.add(new Person("长门",50));
list1.add(new Person("长门",50));
list1.add(new Person("长门",50));
List <Person>list2 = new ArrayList<Person>();
for (int i = 0; i < list1.size(); i++) {
if (!list2.contains(list1.get(i))) {
list2.add(list1.get(i));
}
}
System.out.println(list2);
}
}
------------------------------------------------------------------------------------------------------------手动分割线
Person类 代码区
public class Person {
private String name;
private int age;
public Person() {
super();
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}
------------------------------------------------------------------------------------------------------------------------------手动分割线.
总结一下.
我创建了两个集合,一个集合负责放入我的全部元素.
另外一个空的集合是准备放入 去重后的元素 的集合
然后通过遍历来 对第一个集合进行遍历,
然后写入if 语句,
使用List.containds(Object obj);
对他进行判断.
如果没有,我就list.add();
没有就让你继续循环就可以 了.
有人已经发现了,我在Person类中,重写了equals 方法,
如果不写equals方法, 那么contains 就会调用 Object 这个超类 的 equals 方法,
底层是用equals 方法实现比较的, Object 中的equals 方法,是比较 地址值的,
我们比较的是 值,所以要重写equals方法.
DO you get it?
|
|