JavaCollection集合:概述、体系特点、常用API、遍历方式

news2025/1/10 2:25:57

一、集合概述

集合和数组都是容器

数组

特点:数组定义完成并启动后,类型确定、长度固定。

劣势:在进行增删数据操作的时候,数组是不太合适的,增删数据都需要放弃原有数组或者移位。

使用场景:当业务数据的个数是固定的,且都是同一批数据类型的时候,可以采取定义数组存储。

集合

集合是Java中存储对象数据的一种容器。

特点:集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像是一个气球

优势:非常适合做增删数据的操作。

使用场景:当业务数据的个数不固定,且需要进行增删数据的时候,可以采取定义集合存储。

注意:集合中只能存储引用类型数据,如果要存储基本类型数据可以选用基本类型对应的包装类。

总结

数组和集合的元素存储的个数问题?

  • 数组定义后类型确定,长度固定;
  • 集合类型可以固定,大小可变。

数组和集合存储元素的类型问题?

  • 数组可以存储基本类型和引用类型的数据;
  • 集合只能存储引用类型的数据,如果想要存储解基本类型的数据,可以选用基本类型对应的包装类。

数组和集合适合的场景?

  • 当业务数据的个数确定、类型确定的时候,可以采取定义数组存储;
  • 当业务数据的个数不固定,且需要对数据进行增删操作的时候,可以采取定义集合存储。

二、Collection集合的体系特点

1.集合类体系结构

 collection单列集合,每个元素(数据)只包含一个值。

 Map双列集合,每个元素包含两个值(键值对)。

注意:前期先掌握Collection集合体系的使用。

2.Collection集合体系

 3.Collection集合特点

List系列集合:添加的元素是有序的,可重复的,有索引

ArrayList、LinkedList

Set系列集合:添加的元素是无序的,不重复的,无索引

Hash Set:无序不重复无索引

LinkedHashSet:有序不重复无索引

TreeSet:按大小默认升序排序不重复无索引

    public static void main(String[] args) {
//        List系列:有序可重复有索引
        Collection arr = new ArrayList();
        arr.add("test");
        arr.add("test");
        arr.add(1);
        arr.add(1);
        System.out.println("List系列:"+arr);
//        Set系列:无序不重复无索引
        Collection hashSet = new HashSet();
        hashSet.add("test");
        hashSet.add("test");
        hashSet.add(11);
        hashSet.add(11);
        System.out.println("Set系列:"+hashSet);
    }

控制台输出结果:

4.集合对于泛型的支持

集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型

Collection<String> lists = new ArrayList<String>();
Collection<String> lists1 = new ArrayList<>();	// JDK 1.7开始后面的泛型类型申明可以省略不写

集合和泛型都只支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象。

如果集合中要存储基本类型的数据,需要使用对应的包装类

Collection<Integer> lists1 = new ArrayList<>();		// 存储基本类型的数据需要使用对应的包装类
Collection<Double> lists2 = new ArrayList<>();		// 存储基本类型的数据需要使用对应的包装类
    public static void main(String[] args) {
//        List系列:有序可重复有索引
        Collection arr = new ArrayList();
        arr.add("test");
        arr.add("test");
        arr.add(1);
        arr.add(1);
        System.out.println("List系列:"+arr);
//        Set系列:无序不重复无索引
        Collection hashSet = new HashSet();
        hashSet.add("test");
        hashSet.add("test");
        hashSet.add(11);
        hashSet.add(11);
        System.out.println("Set系列:"+hashSet);

//        集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型
//        Collection<String> list01 = new ArrayList<>(String);在jdk7后,右边的类型申明可以忽略不写
        Collection<String> list01 = new ArrayList<>();
        list01.add("java");
        list01.add("java");
        list01.add("李白");
        list01.add("汪汪头");
        list01.add("汪汪头");
        System.out.println(list01);

        Collection<String> list02 = new HashSet<>();
        list02.add("java");
        list02.add("java");
        list02.add("李白");
        list02.add("汪汪头");
        list02.add("汪汪头");
        System.out.println(list02);

//        如果集合中要存储基本类型的数据,需使用对应的包装类来申明集合类型
        Collection<Integer> list03 = new ArrayList<>();
        list03.add(15);
        list03.add(15);
        list03.add(256);
        list03.add(256);
        list03.add(512);
        System.out.println(list03);
        
        Collection<Integer> list04 = new ArrayList<>();
        list04.add(15);
        list04.add(15);
        list04.add(256);
        list04.add(256);
        list04.add(512);
        System.out.println(list04);
    }

 总结

1.集合代表是?

Collection接口。

2.Collection集合分了哪两大常用的集合体系?

List系列的集合体系:添加的元素有序、可重复、有索引;

Set系列的集合体系:添加的元素无序、不重复、无索引。

注意:Set系列的集合,有些实现类可能会有些改变

3.如何约定集合存储数据的类型,需要注意什么?

集合支持泛型;

集合和泛型不支持基本数据类型,只支持引用数据类型。

三、Collection集合的常用API

1.Collection集合

Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

2.Collection的API

方法说明
public boolean add(E e)把给定的对象(元素)添加到当前集合中
public void clear()清空集合中所有的元素
public boolean remove(E e)把给定的对象(元素)在当前集合中删除
public boolean contains(Object o)判断当前集合是否为空
public int size()返回集合中元素的个数
public boolean isEmpty()判断当前集合是否为空
public Object[]toArray()把集合中的所有元素,存储到数组中
    public static void main(String[] args) {
        //添加元素
        Collection<String> list1 = new ArrayList<>();
        list1.add("java");
        list1.add("java");
        list1.add("CTRL");
        list1.add("三国演义");
        System.out.println("List系列list1集合:"+list1);

        //添加元素:因为set系列的集合:无序不重复无索引
        Collection<Integer> list2 = new HashSet<>();
        list2.add(123);
        list2.add(123);//false
        list2.add(321);
        System.out.println("Set系列list2集合:"+list2);
        System.out.println();

        //把给定的对象在当前集合中删除,成功为true,失败为false
        System.out.println("从list1集合中删除“CTRL”是否成功:"+list1.remove("CTRL"));
        System.out.println("List系列list1集合:"+list1);
        System.out.println("从list2集合中删除“123”是否成功:"+list2.remove(123));
        System.out.println("Set系列list2集合:"+list2);
        System.out.println();

        //判断当前集合是否为空,为空true,不为空false
        System.out.println("list1集合是否为空:"+list1.isEmpty());
        System.out.println("list2集合是否为空:"+list2.isEmpty());
        System.out.println();
        //判断当前集合中是否包含给定的对象,包含true,否则false
        System.out.println("list1集合中是否包含“java”:"+list1.contains("java"));
        System.out.println("list2集合中是否包含“321“:"+list2.contains(321));
        System.out.println();

        //返回集合中元素的个数
        System.out.println("list1集合中有"+list1.size()+"个元素");
        System.out.println("list2集合中有"+list2.size()+"个元素");
        System.out.println();

        //把集合中的所有元素,存储到数组中
        Object[] arr1 = list1.toArray();
        Object[] arr2 = list2.toArray();
        System.out.println();
        System.out.println("list1集合"+list1);
        System.out.println("list1存储到数组arr1后:"+ Arrays.toString(arr1));
        System.out.println("list2集合"+list2);
        System.out.println("list2存储到数组arr2后:"+Arrays.toString(arr2));
        System.out.println();

//        清空集合中所有的元素
        list1.clear();
        System.out.println("list1集合:"+list1);
        System.out.println("list2集合:"+list2);
        System.out.println();

//        判断当前集合是否为空,为空true,否则false
        System.out.println("list1集合是否为空:"+list1.isEmpty());     //true
        System.out.println("list2集合是否为空:"+list2.isEmpty());     //false
        System.out.println();

控制台输出结果:

四、Collection集合的遍历

1.迭代器

遍历就是一个一个的把容器中的元素访问一遍。

迭代器在Java中的代表是iterator,迭代器是集合的专用遍历方式。

(1)Collection集合获取迭代器

方法说明
Iterator<E> iterator()返回当前集合中元素的迭代器,该迭代器对象默认指向当前集合的0索引

(2)Iterator中的常用API

方法说明
boolean hasNext()询问当前位置是否有元素存在,存在返回true,否则返回false
E next()获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界

总结

1.迭代器的默认位置在哪里?

默认指向当前集合的索引0

2.迭代器如果取元素月结会出现什么问题?

会出现NoSuchElementException异常

2.foreach(增强版的for循环)

foreach:既可以遍历集合也可以遍历数组

它是jdk5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。

实现Iterable接口的类才可以使用Iterator迭代器和foreach,Collection接口已经实现了Iterable接口


foreach格式:

for(元素数据类型 变量名 : 数组或者Collection集合) {
	// 在此处使用变量即可,该变量就是元素
}
    public static void main(String[] args) {
//        创建collection集合,添加几个元素
        Collection<String> name = new ArrayList<>();
        name.add("双面龟");
        name.add("泡泡");
        name.add("阿酷");
        name.add("小美美");
        System.out.println(name);
//       使用foreach遍历collection集合
        for (String ele : name){
            System.out.println(ele+"");
        }
        System.out.println("-------");
        
//        创建一个数组,添加几个元素
        int[]scores = {100,456,13,78};
        System.out.println(Arrays.toString(scores));
//        使用foreach遍历数组
        for (double score : scores){
            System.out.println(score+"\t");
        }
    }

控制台输出结果: 

 3.Lambda表达式

得益于jdk8开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

方法说明
defaulf void forEach(Consumer<?super T action)集合Lambda遍历集合
    public static void main(String[] args) {
        //        创建collection集合,添加几个元素
        Collection<String> name = new ArrayList<>();
        name.add("双面龟");
        name.add("泡泡");
        name.add("阿酷");
        name.add("小美美");
        System.out.println(name);
//
        Lambda原形式
//        name.forEach(new Consumer<String>() {
//            @Override
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
//
        简化
//        name.forEach(s -> {
//            System.out.println(s);
//        });
//        进一步简化
        name.forEach(s -> System.out.println(s));
    }

控制台输出结果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter 常用的几种断言方法,你会了吗?

JMeter是一款常用的负载测试工具&#xff0c;通过模拟多线程并发请求来测试系统的负载能力和性能。在进行性能测试时&#xff0c;断言&#xff08;Assertion&#xff09;是非常重要的一部分&#xff0c;可以帮助我们验证测试结果的正确性。下面介绍JMeter常用的几种断言方法。 …

MySQL 运算符解析

1.算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加 &#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&#xff08;%&…

K8S:K8S部署常见错误及解决方法

目录 1、node节点kubelet服务起不来 2、安装cni网络插件时 kubectl get node master和node一直noready①有延时&#xff0c;需要等待10分钟左右&#xff0c;超过15分钟则有问题 3、部署报错kubectl get nodes No resources found 4、k8s部署报错error&#xff1a;kubectl ge…

OpenCV 直方图统计函数 cv::calcHist算是彻底弄明白了

参数说明 void calcHist( const Mat* images, int nimages,const int* channels, InputArray mask,OutputArray hist, int dims, const int* histSize,const float** ranges, bool uniform true, bool accumulate false );images 图像数组。每个图像的大小要一致&#xff0c…

龙的画法图片

由龙老师画素描中国龙的方法,大概可以遵循以下步骤: 确定龙的姿态和比例:在纸上简单地画出龙的基本形状和姿态,包括身体的长度,颈部、腿和尾巴的位置和比例关系。 添加细节:在基本形状的基础上,开始添加一些细节,如龙的头部、眼睛、鼻子、嘴巴、爪子等。注意要保持姿态和比例…

来,花半小时我带你入门vue

半小时入门vue 前言&#xff08;&#xff01;important&#xff09;学习vue的前提什么是vue&#xff1f;vue的引入方式实例化一个对象和创建一个对象实例化一个vue对象模板语法1.插值表达式2.v-text和v-html指令3.v-bind指令4.v-on指令5.v-model指令6.v-if和v-show指令7.v-for指…

浅谈一下接口工具(jmeter、postman、swagger等)

一、接口都有哪些类型&#xff1f; 接口一般分为两种&#xff1a;1.程序内部的接口 2.系统对外的接口 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把 数据库共享给你&#xff0c;他只能给你提供一个他们写好的方法来获取…

MySQL中文乱码问题记录

概述 中文乱码是我们日常编程开发中经常会遇到的问题&#xff0c;包括&#xff1a; 浏览器&#xff08;页面&#xff09;显示乱码&#xff0c;参考记一次中文乱码排查解决流程Linux系统字体缺失导致中文乱码&#xff0c;参考Linux环境下Selenium截图乱码及字体安装及与字符集…

Excel突然弹出 请注意!您的文档的部分内容可能包含文档检测器无法删除的个人信息

环境&#xff1a; excel2016 Win10 专业版 问题描述&#xff1a; Excel突然弹出 请注意&#xff01;您的文档的部分内容可能包含文档检测器无法删除的个人信息 解决方案&#xff1a; 1.打开excel点击左上角的“文件”菜单项 2.依次选择&#xff1a;选项-》信任中心-》信…

(学习日记)2023.5.11

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【小沐学Python】Python实现Web图表功能(ECharts.js,Flask+Vue)

文章目录 1、简介1.1 Vue1.2 Flask 2、Flask echarts.js Vue2.1 Vue2 (CDN) Vue-ECharts2.2 Vue3 (CDN) Vue-ECharts2.3 Vue3 (npm) Flask / nodejs 3、FAQ3.1 Fatal error in launcher: Unable to create process using "c:\users\tomcat\desktop\flask_english\adm…

【华为HCIP | 高级网络工程师】刷题日记(6)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大二在校生 &#x1f43b;‍❄️个人主页&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;落798. &#x1f54a;️系列专栏&#xff1a;零基础学java ----- 重识c语言 ---- 计算机网络 &#x1f413;每日一…

机器学习工作流程

机器学习的定义机器学习的工作流程获取到的数据集的特性 1、什么是机器学习 机器学习是从数据中自动分析获得模型&#xff0c;并利用模型对未知数据进行预测。 2、机器学习工作流程 机器学习工作流程总结 1、获取数据2、数据基本处理3、特征工程4、机器学习&#xff08;模型…

Maven POM和Maven构建配置文件操作笔记

目录 我到现在还是没有太搞懂Maven的作用&#xff0c;我只是有一个模糊的概念就是它可以添加很多的依赖&#xff0c;这样会使项目搭建起来更加方便&#xff0c;你可以谈谈你的看法吗&#xff1f; Maven POM 父&#xff08;Super&#xff09;POM POM 标签大全详解 Maven 构建…

【云原生】Kubeadm部署k8s

【云原生】-- Kubeadm部署k8s 一、部署步骤二、部署kubernetes1、所有节点关闭防火墙 核心防护 iptables规则 swap交换2、修改主机名3、调整内核参数 三、安装Docker1、所有节点安装docker2、所有节点配置Kubernetes源3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 四、…

【Java】抽象类与接口

文章目录 1.抽象类1.1抽象方法 2.接口3.抽象类和接口的区别3.1代码中区分&#xff1a;3.2设计层面区分 在面向对象编程中&#xff0c;抽象是非常重要的一个特征。在Java中可以通过抽象类或接口的形式实现这一特性。 1.抽象类 Java关键字 abstract对应抽象类的使用 1.1抽象方法…

【快速排序】

快速排序 递归法 1、快排 快速排序算法使基于分治策略的一个排序算法&#xff0c;其基本思想是&#xff0c;对于输入的子数组 nums[left : right] 按以下3个步骤排序&#xff1a; &#xff08;1&#xff09;分解&#xff1a;以 nums[left] 为基准元素将 nums[left : right] …

Wisej.NET 3.2 WiseJ Framework Crack

Web Development for Business Applications build ›› migrate ›› modernize ›› See the amazing things people are doing with Wisej.NET Customer storiesmadewithWisej.com Wisej 3.2 is released! read more ›› Wisej.NET Rapid .NET Web Development - 3.2 beta …

【深度学习】第一门课 神经网络和深度学习 Week 1 深度学习概论

文章目录 目录 目录 文章目录 1.1 欢迎来到深度学习 1. 为什么要学深度学习&#xff1f; 2. 我们将学习到哪些内容&#xff1f; 1.2 什么是神经网络&#xff1f; 引例 问题 题解 抽象 复杂化问题 建模 1.3 用神经网络进行监督学习 1. 概念辨析 2. 用神经网络进…

Hive 实战第一讲 hive基本介绍以及环境搭建

文章目录 1.Hive介绍1.1 hive 基本情况1.2 Hive架构原理1.3 Hive 安装1.4 元数据配置1.5 hive 服务部署1.6Hive常用交互命令1.6.1 Hive参数配置方式 1.Hive介绍 1.1 hive 基本情况 hive基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张表。 Hive是…