IT干货网

集合之Collection

developer 2022年03月12日 编程设计 151 0

集合之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 

评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

IO流之对象专属流