资讯专栏INFORMATION COLUMN

java集合

JinB / 924人阅读

摘要:主要用于遍历集合中的元素,对象也被称为迭代器。使用迭代过程中,不可修改集合元素迭代器采用快速失败机制。一旦迭代过程中检测到该集合已经被修改,程序立即出发异常,而不是显示修改后的结果,避免了共享资源而引发的潜在问题。

集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。

Collection和Iterator接口

Collection是List,Set,Queue接口的父接口,该接口里定义的方法既可用于操作Set接口,也可用于操作List和Queue集合。

public class CollectionTest {
    public static void main(String[] args) {
        Collection collection = new ArrayList<>();
        collection.add("1");
        collection.add("2");
        collection.add("3");
        collection.add("rr");
        collection.remove("rr");
        /*ArrayList arrayList = new ArrayList<>();
        arrayList.add("1");
        arrayList.add("2");
        
        collection.retainAll(arrayList);
        System.out.println(collection);//[1, 2]
         */        
        //[1, 2, 3]
        System.out.println(collection);
        //true
        System.out.println(collection.contains("1"));
        ArrayList arrayList = new ArrayList<>();
        arrayList.add("1");
        arrayList.add("2");
        //从Collection中剔除arrayList中的元素
        collection.removeAll(arrayList);
        //[3] 
        System.out.println(collection);
        //[1, 2]
        System.out.println(arrayList);
        //控制Collection集合里只剩下arrayList集合中也包含的元素
        arrayList.retainAll(collection);
        System.out.println(arrayList);
        //删除Collection里的元素
        collection.clear();
        //[]
        System.out.println(collection);
    }
}
使用Lambda表达式遍历集合

Iterator是Collection接口的父接口。

Lambda表达式遍历集合元素

public class CollectionEach {
    public static void main(String[] args) {
        Collection books = new HashSet<>();
        books.add("java");
        books.add("python");
        books.add("Go");
        //Consumer函数接口 Lambda表达式来遍历集合
        books.forEach((e) -> System.out.println(e));
    }
}
使用java8增强的Iterator遍历集合元素。

Iterator主要用于遍历Collection集合中的元素,Iterator对象也被称为迭代器。

Iterator接口来遍历集合元素

public class IteratorTest {
    public static void main(String[] args) {
        Collection collection = new HashSet<>();
        collection.add("1");
        collection.add("2");
        collection.add("3");
        Iterator iterator = collection.iterator();
        //java8新加的默认方法,该方法可使用Lambda表达式来遍历集合元素
        iterator.forEachRemaining((e) -> {
            if (e=="1") {
                iterator.remove();
            }
            System.out.println(e);
            e="ttt";
        });
        //[2, 3]
        System.out.println(collection);
//        System.out.println(iterator.hasNext());     false
        /*
         * iterator 遍历集合 创建对象后只能使用一次
         * */
        while (iterator.hasNext()) {
            String next = iterator.next();
            System.out.println(next);
        }
    }
}

当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身并没有任何影响。

当使用Iterator迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterator的remove()方法删除上一次next()方法返回的集合元素才可以,否则引发异常。

public class IteratorErorTest {
    public static void main(String[] args) {
        Collection collection = new HashSet<>();
        collection.add("1");
        collection.add("2");
        collection.add("3");
        Iterator iterator = collection.iterator();
        iterator.forEachRemaining((e) ->{
            if (e.equals("1")) {
                //Exception in thread "main" java.util.ConcurrentModificationException
                //使用Iterator迭代过程中,不可修改集合元素
                collection.remove(e);
            }
        });
        System.out.println(collection);
    }
}

Iterator迭代器采用快速失败机制fail-fast。一旦迭代过程中检测到该集合已经被修改,程序立即出发ConcurrentModificationException异常,而不是显示修改后的结果,避免了共享资源而引发的潜在问题。

使用Lambda表达式遍历Iterator
public class CollectionEach {
    public static void main(String[] args) {
        Collection books = new HashSet<>();
        books.add("java");
        books.add("python");
        books.add("Go");
        //Consumer函数接口 Lambda表达式来遍历集合
        books.forEach((e) -> System.out.println(e));
    }
}
使用forEach循环遍历集合元素

当使用foreach循环迭代访问几个元素时,该集合也不能被改变。

使用java8新增的Predicate操作集合
public class PredicateTest {
    public static void main(String[] args) {
        Collection collection = new HashSet<>();
        collection.add("111");
        collection.add("21");
        collection.add("13");
        //满足剔除
        collection.removeIf((e) -> e.length() ==2);
        //[111]
        System.out.println(collection);
    }
}

计数字符串中a的数量

public class SumAnum {
    public static void main(String[] args) {
        String string = "aavaatgdaaaaaa";//10
        System.out.println(sumA(string, (e) ->e.equals("a")));
    }
    private static int sumA(String string,Predicate predicate) {
        int nu = 0;
        for (int i = 0; i < string.length(); i++) {
            if (string.charAt(i) == "a") {
                nu++;
            }
        }
        return nu;
    }
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69319.html

相关文章

  • 集合概要学习---粗略

    摘要:集合框架的基本接口类层次结构其中表示接口,表示实现类和在实际开发中,需要将使用的对象存储于特定数据结构的容器中。实例是迭代器,拥有两个方法方法迭代器用于遍历集合元素。返回值则是转换后的数组,该数组会保存集合中的所有元素。 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。 Java集合框架的基本接口/类层次结构...

    DesGemini 评论0 收藏0
  • Java 性能调优指南之 Java 集合概览

    摘要:单线程集合本部分将重点介绍非线程安全集合。非线程安全集合框架的最新成员是自起推出的。这是标准的单线程阵营中唯一的有序集合。该功能能有效防止运行时造型。检查个集合之间不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【编者按】本文作者为拥有十年金融软件开发经验的 Mikhail Vorontsov,文章主要概览了所有标准 Java 集合类型。文章系国内 ITOM 管理平台 O...

    gnehc 评论0 收藏0
  • Java 集合 Collection、Iterator

    摘要:如果需要创建对象,则必须与一个被迭代的集合。这是一个有状态的方法该方法用于保证对该流的后续访问中最大允许访问的元素个数。可以对集合元素进行整体的聚集操作。 Java集合分为Set(无序、不可重复)、List(有序、重复)、Queue(队列)和Map(映射关系) Java集合概述 数组元素既可以是基本类型的值,也可以是对象(实际保存对象的引用变量)集合只能保存对象(实际保存对象的引用变量...

    harryhappy 评论0 收藏0
  • Java™ 教程(集合介绍)

    集合介绍 本节介绍Java集合框架,在这里,你将了解集合是什么以及它们如何使你的工作更轻松、程序更好,你将了解构成Java集合框架的核心元素 — 接口、实现、聚合操作和算法。 集合 — 有时称为容器 — 只是一个将多个元素组合到一个单元中的对象,集合用于存储、检索、操作和传递聚合数据。通常,它们代表形成自然组的数据项,例如扑克牌(卡片集合)、邮件文件夹(信件集合)或电话目录(名称到电话号码的映射)...

    taoszu 评论0 收藏0
  • java源码

    摘要:集合源码解析回归基础,集合源码解析系列,持续更新和源码分析与是两个常用的操作字符串的类。这里我们从源码看下不同状态都是怎么处理的。 Java 集合深入理解:ArrayList 回归基础,Java 集合深入理解系列,持续更新~ JVM 源码分析之 System.currentTimeMillis 及 nanoTime 原理详解 JVM 源码分析之 System.currentTimeMi...

    Freeman 评论0 收藏0
  • Java集合框架概述和集合的遍历

    摘要:第三阶段常见对象的学习集合框架概述和集合的遍历一集合框架的概述集合的由来如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。进而它们的遍历方式也应该是不同的,最终就没有定义迭代器类。 第三阶段 JAVA常见对象的学习 集合框架概述和集合的遍历 (一) 集合框架的概述 (1) 集合的由来 如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一...

    happyhuangjinjin 评论0 收藏0

发表评论

0条评论

JinB

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<