package com.shujia.day13;
import java.util.ArrayList;
import java.util.Iterator;
/*
Collection:
- List(有序【指的是存储和取出的顺序是一致的】且可以发生重复,且有索引的概念)
- ArrayList: 底层数据结构是数组,查询快,增删慢,线程不安全的,效率高。
- Vector
- LinkedList
- Set(元素唯一且无序)
*/
/*
去除集合中字符串的重复值(字符串的内容相同)
*/
public class ArrayListTest1 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
list1.add("java");
list1.add("hadoop");
list1.add("hive");
list1.add("java");
list1.add("hello");
list1.add("hadoop");
System.out.println("list1: " + list1);
System.out.println("=======================");
//再创建新的集合,遍历旧集合将元素添加到新集合中
//再添加之前,判断一下新集合是否有该元素,若存在,就不添加
ArrayList list2 = new ArrayList();
for (int i = 0; i < list1.size(); i++) {
String s = (String)list1.get(i);
if(!list2.contains(s)){
list2.add(s);
}
}
System.out.println("list2: " + list2);
}
}
package com.shujia.day13;
import java.util.ArrayList;
/*
去除集合中自定义对象的重复值(对象的成员变量值都相同)
我们按照处理字符串的方式来处理自定义对象,发现自定义对象并没有去重
我们需要取看一看contains()方法的底层逻辑,是调用了元素类中的equals方法进行比较的,而我们自己自定义的类中并没有重写equals方法
所以用的是父亲Object类中的equals方法,比较的是地址值【拿当前的元素与新集合中每一个元素进行比较】,每一个学生对象都是new出来
他们的地址值肯定是不一样的,比较结果永远是false
我们现在要比较成员变量值,Student类重写equals方法即可
*/
public class ArrayListTest2 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
Student s1 = new Student("小黑", 18);
Student s2 = new Student("小白", 17);
Student s3 = new Student("小花", 18);
Student s4 = new Student("小红", 19);
Student s5 = new Student("小黑", 18);
list1.add(s1);
list1.add(s2);
list1.add(s3);
list1.add(s4);
list1.add(s5);
System.out.println("list1: " + list1);
System.out.println("=======================");
//再创建新的集合,遍历旧集合将元素添加到新集合中
//再添加之前,判断一下新集合是否有该元素,若存在,就不添加
ArrayList list2 = new ArrayList();
for (int i = 0; i < list1.size(); i++) {
Student s = (Student)list1.get(i);
/*
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < this.size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
*/
if(!list2.contains(s)){
list2.add(s);
}
}
System.out.println("list2: " + list2);
}
}