方式1:
新建空集合思想
存储字符串类型并保证集合的元素唯一
List<String>
集合中Collection/List--->contains(Object o)底层依赖于Object的equals方法而List现在存储的是String类型,本身重写Object的equals,所以比较的是内容是否相同
public class ListTest2 {
public static void main(String[] args) {
//创建List集合
List<String> list = new ArrayList<>() ;
//现在给集合中添加重复的字符串数据
list.add("hello") ;
list.add("hello") ;
list.add("world") ;
list.add("world") ;
list.add("javaEE") ;
list.add("world") ;
list.add("javaEE") ;
list.add("android") ;
list.add("android") ;
list.add("ios") ;
//新建一个空的集合List
List<String> newList = new ArrayList<>() ;
//遍历以前的集合
for(String s :list){
//使用新集合判断,不包含这个元素,说明该元素没有重复,就可以添加
if(!newList.contains(s)){
newList.add(s) ;
}
}
//遍历新的集合
for(String s:newList){
System.out.println(s);
}
}
}
方式2:
利用选择排序的思想去完成
public class ListTest3 {
public static void main(String[] args) {
//创建List集合
List<String> list = new ArrayList<>() ;
//现在给集合中添加重复的字符串数据
list.add("hello") ;
list.add("hello") ;
list.add("world") ;
list.add("world") ;
list.add("javaEE") ;
list.add("world") ;
list.add("javaEE") ;
list.add("android") ;
list.add("android") ;
list.add("ios") ;
//利用选择排序的思想完成
for(int x = 0 ; x < list.size()-1 ; x ++){
for(int y = x +1 ; y < list.size() ; y++){
//如果后面的元素和前面的元素相同
if(list.get(y).equals(list.get(x))){
//通过集合remove掉
list.remove(y) ;
//角标--
y -- ;
}
}
}
//增强for循环遍历
for(String s:list){
System.out.println(s);
}
}
}
List<Student>存储自定义对象 怎么去重?
方式1:
新建集合思想
contains(Object)方法依赖于Object的equals方法,所以集合存储的类型所在的类必须重写equals方法,否则默认使用Object的equals方法比较的地址值是否相同
public class Student {
private String name ;
private int age ;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name.equals(student.name);
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + age;
return result;
}
}
public class ListTest4 {
public static void main(String[] args) {
//创建一个List集合
List<Student> list = new ArrayList<>() ;
//创建一些学生对象:有重复的成员信息
Student s1 = new Student("高圆圆",42) ;
Student s2 = new Student("高圆圆",42) ;
Student s3 = new Student("刘诗诗",39) ;
Student s4 = new Student("刘诗诗",39) ;
Student s5 = new Student("张佳宁",30) ;
Student s6 = new Student("文章",36) ;
Student s7 = new Student("文章",36) ;
Student s8 = new Student("姚笛",32) ;
//添加到集合中
list.add(s1) ;
list.add(s2) ;
list.add(s3) ;
list.add(s4) ;
list.add(s5) ;
list.add(s6) ;
list.add(s7) ;
list.add(s8) ;
//方式1:创建新的一个新集合
List<Student> newList = new ArrayList<>() ;
//遍历以前的集合获取每一个学生对象
for(Student s:list){
//如果当前newList不包含这个学生添加到新集合中
if(!newList.contains(s)){
newList.add(s) ;
}
}
//遍历新集合
for(Student student:newList){
System.out.println(student.getName()+"----"+student.getAge());
}
}
}
方式2:使用选择排序思想 将List<Student>存储的重复的学生对象进行重写
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
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 o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
if (age != person.age) return false;
return name.equals(person.name);
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + age;
return result;
}
}
public class PersonTest {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
Person p1 = new Person("张佳宁",32);
Person p2 = new Person("范冰冰",38);
Person p3 = new Person("张佳宁",32);
Person p4 = new Person("文章",37);
Person p5 = new Person("文章",37);
Person p6 = new Person("高圆圆",32);
Person p7 = new Person("范冰冰",38);
Person p8 = new Person("高圆圆",32);
Person p9 = new Person("张佳宁",32);
list.add(p1);
list.add(p2);
list.add(p3);
list.add(p4);
list.add(p5);
list.add(p6);
list.add(p7);
list.add(p8);
list.add(p9);
//利用选择排序的思想
for (int x = 0; x <list.size()-1 ; x++) {
for (int y = x+1; y <list.size() ; y++) {
if(list.get(y).equals(list.get(x))){
list.remove(y);
y--;
}
}
}
for (Person person : list) {
System.out.println("name:"+person.getName()+"\t"+"age:"+person.getAge()+"岁");
}
}
}