Java集合 Collection接口常用方法

Java集合 Collection接口常用方法

Java中集合分为两大类: 单个方式存储元素:java.util.Collection; 键值对方式存储元素:java.util.Map;

java.util.Collection

Collection中能存放什么元素:没有使用泛型之前,Collection中可以存放Object的所有子类型;是由泛型之后,Collection中只能存储某个具体的类型。

只要是Object的子类都可以存放到Collection中。(集合中不能直接存储基本数据类,也不能存java对象,只能存储java对象的内存地址)。

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

public class CollectionTest {
    public static void main(String[] args) {
        // 创建一个集合对象
        // Collection c = new Collection();// 接口是抽象的,不能创建对象
        // 多态
        Collection c = new ArrayList();
        // 测试Collection接口中常用方法
        // 存放的是对象的内存地址
        // 自动装箱 相当于Integer x = new Integer(1200);
        c.add(1200);
        c.add(new Object());
        c.add(true);
        // 获取集合中元素的个数
        System.out.println("集合中元素的个数:" + c.size());//3
        // 清空集合
        c.clear();
        System.out.println("集合中元素的个数:" + c.size());//0

        c.add("hello world");// 存的是内存地址
        c.add("鳄鱼君");

        // 判断集合中是否包含元素
        boolean b1 = c.contains("鳄鱼君");
        System.out.println(b1);//true 包含

        // 移除集合中某个元素
        c.remove("鳄鱼君");
        boolean b2 = c.contains("鳄鱼君");
        System.out.println(b2);// false
    }
}

contains方法是用来判断集合中是否包含某个元素的方法,底层是调用equals方法进行比对的,equals返回true就表示包含这个元素,remove方法也是这样

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

public class CollectionTest {
    public static void main(String[] args) {
        // 创建一个集合对象
        // Collection c = new Collection();// 接口是抽象的,不能创建对象
        // 多态
        Collection c = new ArrayList();
        c.add(1200);

        // 判断集合是否为空
        System.out.println(c.isEmpty());//false
        c.clear();
        System.out.println(c.isEmpty());//true

        c.add("鳄鱼君1");
        c.add("鳄鱼君2");
        // 转换成数组
        Object[] objs = c.toArray();
        for (int i = 0; i < objs.length; i++) {
            System.out.println(objs[i]);
        }
    }
}
集合迭代:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add(1200);
        c.add("abc");
        c.add(true);
        c.add(1);
        c.add(1);
        c.add(new Object());

        // 对集合Collection进行遍历/迭代
        // 获取集合对象的迭代器对象Iterator
        Iterator iterator = c.iterator();

        // 迭代数据
        // 存进去什么类型,取出来还是什么类型,只不过在输出的时候会转成字符串
        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
}
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;

public class CollectionTest {
    public static void main(String[] args) {
        // 无序不可重复,存进去和取出的顺序不一定相同
        Collection c = new HashSet();
        c.add(1200);
        c.add(3);
        c.add(1);
        c.add(2);
        c.add(1);
        c.add(3);
        c.add(2);

        Iterator iterator = c.iterator();

        while (iterator.hasNext()){
            Object obj = iterator.next();
            System.out.println(obj);
        }
    }
}
当集合的结构发生改变时,迭代器必须重新获取,如果还是使用以前的迭代器,会出现异常:java.util.ConcurrentModificationException
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest {
    public static void main(String[] args) {
        // 无序不可重复,存进去和取出的顺序不一定相同
        Collection c = new ArrayList();

        c.add(1);
        c.add(2);
        c.add(3);
        c.add(3);

        Iterator iterator = c.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            // 删除元素,集合元素结构发生改变,需要重新获取迭代器
            // 直接通过集合去删除元素,没有通知迭代器
            // 导致迭代器的快照和原集合状态不同
            // c.remove();

            // 使用迭代器来删除元素,迭代器指向的当前元素
            iterator.remove();

            System.out.println(c.size());
        }
    }
}
分享到 :
Java 自定义异常
上一篇 2020-08-16
Java中的List接口
2020-08-16 下一篇

发表评论

登录... 后才能评论