集合之Collection

集合之Collection

常用方法

以下代码列举Collection的常用方法:

package com.javalearn.collection.collections;

import java.util.ArrayList;
import java.util.Collection;

public class TestForCollection {
    public static void main(String[] args) {
        Collection c = new ArrayList();  // 多态
        c.add(12);  // 自动装箱(java5的新特性),实际上放进去了一个对象内存地址。Integer x = new Integer(12)
        c.add(true);  //自动装箱
        c.add(new Object());
        c.add(new Student());
        System.out.println("集合中元素个数是:"+c.size());  // 获取集合元素个数
        c.clear();  // 清空集合
        System.out.println("集合中元素个数是:"+c.size());
        c.add("green");
        boolean flag = c.contains("green");  // 判断是否包含元素
        System.out.println(flag);
        c.remove("green");  // 删除元素
        System.out.println("集合中元素个数是:"+c.size());
        System.out.println(c.isEmpty());  // 判断是否为空
        c.add(100);
        c.add("good");
        Object[] obj =  c.toArray();  // 集合转换为数组,使用得不多
        for (int i = 0; i < obj.length; i++) {
            Object o = obj[i];
            System.out.println(o);
        }
    }
}

class Student {

}

输出结果:

集合中元素个数是:4
集合中元素个数是:0
true
集合中元素个数是:0
true
100
good

Process finished with exit code 0

迭代

以下代码使用iterator遍历Collection中的元素:

package com.javalearn.collection.iterate;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class TestForIterate {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("abc");
        c.add(100);
        Iterator it = c.iterator();  // 如何使用,十分重要。最初指向第一个元素之前
        while (it.hasNext()) {  // 判断指针下一个位置还有没有元素
            Object obj = it.next();  // 取出下一个位置的元素,不管存进去的是什么,取出来统一是object,并且指向下一位置
            System.out.println(obj);  // sout使obj转换为字符串
        }
      
    }
}

输出结果:

abc
100

contains方法

参数为String

以下代码对contains方法做出更详细的解释:

package com.javalearn.collection.contain;

import java.util.ArrayList;
import java.util.Collection;

public class TestForContain {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        String s1 = new String("abc");
        String s2 = new String("abc");
        c.add(s1);
        System.out.println(c.contains(s2));  // // contains中使用了equals方法,equals原来是Object的方法,用于比较内存地址,当contains中传入的参数是String时,equals被重写,判断内容,而不是判断地址,因为String的equals方法就是判断内容,即s2.equals(数组元素)
        
    }
}

输出结果:

true

自定义类

以下代码使用自定义类作为contains的参数,来深入理解contains:

package com.javalearn.collection.contain2;

import java.util.ArrayList;
import java.util.Collection;

public class TestForContain2 {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        User u1 = new User("jack");
        User u2 = new User("jack");
        collection.add(u1);
        System.out.println(collection.contains(u2));  // 调用Object的equals方法,比较内存地址
        
    }
}

class User {
    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }
}

输出内容:

false

重写了equals的自定义类

以下代码使用重写了equals的自定义类作为contains的参数:

package com.javalearn.collection.contain2;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

public class TestForContain2 {
    public static void main(String[] args) {
        Collection collection = new ArrayList();
        User u1 = new User("jack");
        User u2 = new User("jack");
        collection.add(u1);
        System.out.println(collection.contains(u2));  // 调用User的equals方法,比较内存地址或比较内容

    }
}

class User {
    private String name;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {  // 重写equals方法
        if (o == null || !(o instanceof User))return false;
        if(o == this) return true;  // 比较内存地址
        User u = (User)o;
        return u.name.equals(this.name);  // 比较name
    }


}

输出结果:

true
posted on 2021-12-10 11:11  菜小疯  阅读(42)  评论(0编辑  收藏  举报