java集合(三)Iterator与Collections

83 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情

Iterator

简介

中文名称:迭代器。是一个接口,每个集合中实现类都对Iterator提供了内部类的实现。

通过Iterator可以实现遍历集合的效果。

仅collection实现类可用 map不可用 增强for循环底层为迭代器

存在意义:

隐藏集合实现细节,无论是哪种集合都是通过Iterator进行操作,而不是直接操作集合。通过一套API实现所有集合的遍历。

可以在遍历时删除集合中的值。

代码示例

public class IteratorTest {
    public static void main(String[] args) {
​
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
//            list.remove(1);  //ConcurrentModificationException 删除或插入报错
            iterator.remove();  //删除当前内容
        }
       for (Integer integer : list) {
 //           list.remove(0); //ConcurrentModificationException 不可用
        }
        for (int i = 0; i < list.size(); i++) {
            list.remove(0); //无影响
        }
    }
}

Collections

介绍

Collections是一个工具类型,一个专门操作集合的工具类。

代码示例

public class TestCollections {
    public static void main(String[] args) {
        //添加元素
        List<Integer> list = new ArrayList();
        Collections.addAll(list, 10, 50, 30, 90, 85, 100);//6
        System.out.println(list);
        //排序
        Collections.sort(list);//默认按照内部比较器
        System.out.println(list);
        //查找元素(元素必须有序)
        int index = Collections.binarySearch(list, 500);//不存在返回负数
        System.out.println(index);
        //获取最大值和最小值
        int max = Collections.max(list);
        int min = Collections.min(list);
        System.out.println(max + "   " + min);
        //填充集合
        Collections.fill(list, null);
        System.out.println(list);
        //复制集合
        List list2 = new ArrayList();
        Collections.addAll(list2, 10, 20, 30, 50);
        System.out.println(list2);
        Collections.copy(list, list2);//dest.size >= src.size  目标列表的长度至少必须等于源列表。
        System.out.println(list);
        //同步集合
        //StringBuffer 线程安全效率低 StringBuilder 线程不安全,效率高
        //Vector 线程安全  效率低  ArrayList 线程不安全,效率高
        //难道是要性能不要安全吗,肯定不是。
        //在没有线程安全要求的情况下可以使用ArrayList
        //如果遇到了线程安全的情况怎么办
        //方法1:程序员手动的将不安全的变成安全的   
        //方法2:提供最新的线程安全并且性能高的集合类
        List list3 = new ArrayList();
        Collections.addAll(list3, 10, 90, 30, 40, 50, 23);
        System.out.println(list3);
        //将list3转换成线程安全的集合类
        list3 = Collections.synchronizedList(list3);
        //下面再操作,就线程安全了
    }
}

\