ArrayList集合及例题 day12

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);
    }
}
posted @ 2024-08-11 19:48  ていせい  阅读(4)  评论(0编辑  收藏  举报