Java集合(一)

news2024/9/24 15:25:10

目录

Java集合框架概述

Collection接口

Collection接口方法

Iterator迭代器接口

使用 Iterator 接口遍历集合元素

Iterator接口的方法

Iterator接口remove()方法

使用 foreach 循环遍历集合元素


Java集合框架概述

一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。

集合、数组都是对多个数据进行存储操作的,简称java容器,此时的存储均为内存层面的存储,不涉及持久化存储。

数组在内存存储方面的特点:

1.数组初始化以后,长度就确定了。

2.数组声明的类型,就决定了进行元素初始化时的类型

数组在存储数据上的弊端:

1.数组初始化以后,长度就不可变了,不便于扩展

2.数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。 同时无法直接获取存储元素的个数

3.数组存储的数据是有序的、可以重复的。---->存储数据的特点单一

java集合类可以用于存储数量不等的多个对象,还可用于存储具有影射关系的关联数组。

Java集合可以分为两种体系:CollectionMap

Collcetion接口:单列数据,定义了存取一组对象的方法的集合

        List:元素有序,可重复的集合

        Set:元素无序、不可重复的集合

Map接口:双列数据,保存具有映射关系“Key-value对”的集合

Collection接口

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

JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List) 实现。

在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 JDK 5.0 增加了泛型以后,Java 集合可以记住容器中对象的数据类型。

Collection接口方法

1、添加

 add(Object obj)

 addAll(Collection coll)

2、获取有效元素的个数

 int size()

3、清空集合(只清空内容)

 void clear()

4、是否是空集合

 boolean isEmpty()

5、是否包含某个元素

 boolean contains(Object obj):是通过元素的equals方法来判断是否是同一个对象(要求所在obj类重写equals()方法

 boolean containsAll(Collection c):也是调用元素的equals方法来比较的。拿两个集合的元素挨个比较。

 

6、删除

 boolean remove(Object obj) :通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素

 boolean removeAll(Collection coll):取当前集合的差集

均需要重写equals()方法

7、取两个集合的交集(会修改当前集合)

 boolean retainAll(Collection c):把交集的结果存在当前集合中,不影响c
 

8、集合是否相等

 boolean equals(Object obj):当前集合元素和形参集合元素都相等(是否有序看具体对象)

9、转成对象数组

 Object[] toArray()

10、转换成集合:调用Arrays类的静态方法asList()

11、获取集合对象的哈希值

 hashCode()

12、遍历

 iterator():返回迭代器对象,用于集合遍历 

import org.junit.Test;
import java.util.Date;
import java.util.ArrayList;
import java.util.Collection;

/**
 * @author  light
 * @Description  集合
 * @create 2022-11-29 15:15
 */
public class CollectionTest {
    /**
     * Collection接口中声明的常用方法
     */
    @Test
    public void test1(){
        Collection coll=new ArrayList();//arrayList是collection子接口List的实现

        //add(Object e):将元素e添加到集合中去
        coll.add("AA");
        coll.add("BB");
        coll.add(123);//自动装箱
        coll.add(new Date());

        //size:获取添加元素的个数
        System.out.println(coll.size());//4

        //addAll(Collection coll1):将coll1中集合的元素添加到当前集合中去
        Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll.addAll(coll1);
        System.out.println(coll.size());//6

        //clear():清空集合内的元素
        coll.clear();


        //boolean  isEmpty():判断当前集合是否为空
        System.out.println(coll.isEmpty());


        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        //boolean  contains(Object obj):判断集合中是否包含Obj在判断是回去调用
        boolean contains = coll.contains(1236);
        System.out.println(contains);


        //boolean  remove(Object obj):从当前集合中删除obj元素
        System.out.println(coll.remove(123));
        System.out.println(coll);

        //removeAll(Collection c):从当前集合中移除c中的所有元素:将当前集合进行修改

        //retainAll:相当于求交集;将当前集合进行修改

        //equals(Object obj):当前集合和形参集合的元素是否相同

        //hashCode():返回当前对象的哈希值

        //集合可以转换为数组:toArray()

        //数组--->集合:调用Arrays类的静态方法asList()

        //iterator():返回Iterator接口的实例,用于遍历集合元素


    }

}

Iterator迭代器接口

使用 Iterator 接口遍历集合元素

Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素

GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。

Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了 Iterator接口的对象。

Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。 

Iterator接口的方法

在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且 下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。 

import org.junit.Test;

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

/**
 * @auther light
 * @Description  集合元素的遍历:使用迭代器iterator()
 * @create 2022-11-30 21:25
 */
public class IteratorTest {

    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();//只是迭代器


//        System.out.println(coll.iterator().next());


        //遍历
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

 运行结果:

Iterator接口remove()方法

Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。 

如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法, 再调用remove都会报IllegalStateException。 

import org.junit.Test;

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

/**
 * @auther light
 * @Description  集合元素的遍历:使用迭代器iterator()
 * @create 2022-11-30 21:25
 */
public class IteratorTest {
    /**
     * Iterator中的remove()方法
     *
     */
    @Test
    public void test2(){

        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();
//      删除集合中"Tom"数据
        while(iterator.hasNext()){
            Object next = iterator.next();
            if("Tom".equals(next)){
                iterator.remove();//只能调用迭代器的remove()方法
            }
        }

        Iterator iterator1 = coll.iterator();
        while(iterator1.hasNext()){
            System.out.println(iterator1.next());
        }

    }

}

运行结果:

使用 foreach 循环遍历集合元素

Java 5.0 提供了 foreach 循环(增强for循环)迭代访问 Collection和数组。

遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

遍历集合的底层调用Iterator完成操作。

foreach还可以用来遍历数组。 

import org.junit.Test;

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

/**
 * @auther light
 * @Description 增强型for循环
 * @create 2022-11-30 21:56
 */
public class ForTest {

    @Test
    public  void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);
        //for(集合中元素的类型 局部变量:集合对象)
        //内部仍然调用迭代器
        for(Object obj:coll){
            System.out.println(obj);

        }
    }
}

 运行结果:

 

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

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

相关文章

一文搞懂华为的HCIA-Datacom(学习视频+模拟器+考试题库)

一、华为认证是什么? 二、为什么要选择华为认证 三、HCIA-Datacom的介绍 1.通过认证验证的能力 中小型园区网络的规划设计、部署实施、运维和优化能力 2.建议掌握的知识 路由交换原理、WLAN基本原理、网络安全基础知识、网络管理与运维基础知识、以及SDN与编程自动…

全球十大正规贵金属交易价格走势app软件排名(2023口碑榜)

最近,随着人们对贵金属产品的需求增加,贵金属价格走势变得更加复杂。为了更好地掌握贵金属市场的变化,很多投资者都在寻找一款可以追踪贵金属价格走势的app软件。 针对这一需求,现在已经有多款贵金属价格走势软件涌现在市场上。…

SSRF学习 3

目录 <1> 什么是SSRF&#xff1f; <2> 通常SSRF会发生在哪些位置&#xff1f; <3> 测试流程 <4> Weblogic-ssrf 复现 (1) 漏洞存在点 (2) 注入HTTP头&#xff0c;利用Redis反弹shell (3) 修复方案 <1> 什么是SSRF&#xff1f; SSRF(Serv…

CentOS安装配置Nginx

一、下载Nginx&#xff1a; 说明&#xff1a; 1&#xff09;因为这是一个stable稳定版本。 2&#xff09;Mainline version: 开发版&#xff1b;Stable version: 稳定版&#xff1b;Legacy versions: 早期版本&#xff1b; 二、上传到Linux中&#xff1a; 三、解压文件&#…

HBase集群部署

目录 一、前期准备 二、HBase下载 1. 查看HBase与hadoop版本对应关系 2. hbase的下载 3. 将hbase的tar包上传到linux 下 二、安装hbase 1. 解压 2. HBase的文件配置 主机名hadoop版本HBase版本hadoop安装路径Hbase安装路径HadoopMaster3.3.02.4.3/home/hadoop/softwareh…

【SSM】篇二:注解开发与AOP

文章目录1、注解开发1.1 注解开发定义bean1.2 纯注解开发模式1.3 注解开发Bean的作用范围和生命周期1.4 注解开发依赖注入1.5 注解开发管理第三方Bean2、Spring整合案例2.1 Spring整合mybatis2.2 Spring整合Junit3、AOP3.1 AOP思想入门案例3.2 AOP工作流程3.3 AOP切入点表达式3…

pg逻辑复制详解

目录 什么是逻辑复制 逻辑解析 复制槽 output plugin ​​​​​​​几个常见的outputplugin 几个能手动接收解析数据的函数和工具 逻辑解析测试1&#xff1a;观察用2个不同的output plugin解析数据 逻辑解析测试2&#xff1a;使用pg_recvlogical工具接收逻辑解析数据&am…

服务器配置 | 在Windows本地显示远程服务器绘图程序

文章目录方法1&#xff1a;在MobaXterm的终端输入指令方法2&#xff1a;在Pycharm中运行前提概要&#xff0c;需要在本地Windows端显示点云的3d可视化界面 对于点云的3d可视化一般有两种方法&#xff0c;open3d显示或者是mayavi显示。这两个库都可以使用pip install来实现安装…

给正在准备PMP考试的同学一些建议

去年年尾参与了pmp考试&#xff0c;顺利通过&#xff0c;并得了5A&#xff0c;让我小小激动了一下。在出来结果之前&#xff0c;我也是坚信自己能过&#xff0c;得知是5A&#xff0c;当然也是非常高兴。话不多说&#xff0c; 先贴图&#xff1a; 这里我将要说一下我都是如何备…

Modbus网关在锂电池干燥箱的应用

在锂离子电池生产过程中&#xff0c;将正负极片辊压绕卷再放入电池盒之后&#xff0c;须对锂电池电芯极组进行烘烤干燥。相信大家也了解水分对锂电池的性能影响是很大的&#xff0c;需要注液前在装配车间将锂离子电池电芯内部的水分去除&#xff0c;以免影响锂电池质量。在锂电…

星光2开发板使用ECR6600U无线wifi网卡的方法

visionfive2 开发板性能还是不错的&#xff0c;有些人买的时候会带一个无线wifi网卡&#xff0c;但是官方提供的操作系统没有驱动。 所以需要自己编驱动&#xff08;他大爷的&#xff09;。 还好有人已经踩过坑了。 星光2之USB无线网卡使用教程【新增RTL8832AU WiFi6双频无线…

开发手册——一、编程规约_3.代码格式

这篇文章主要梳理了在java的实际开发过程中的编程规范问题。本篇文章主要借鉴于《阿里巴巴java开发手册终极版》 下面我们一起来看一下吧。 1. 【强制】大括号的使用约定。如果是大括号内为空&#xff0c;则简洁地写成{}即可&#xff0c;不需要换行&#xff1b;如果是非空代码…

BI的能力边界:能解决的企业问题和不擅长的领域

数字化转型本就需要借助信息化相关技术、思想来完成&#xff0c;所以说信息化建设同样是数字化转型过程中非常重要的一环&#xff0c;而这就是商业智能BI和数字化转型的关系 BI 能解决的企业问题 数据是企业的重要资产&#xff0c;也是企业商业智能BI的核心要求。通常&#x…

【微信小程序】-- 全局配置 -- tabBar(十七)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

【数据可视化工具】浅谈 DataEase 和 FineBI 支持的数据源

前言最近对市面上比较火热的数据可视化工具 DataEase 和 FineBI 进行了调研&#xff0c;在支持的数据源方面感觉不太一样&#xff0c;所以就有了这篇文章&#xff0c;话不多说&#xff0c;我们一起来看一下吧&#xff01;以下的内容&#xff0c;大多来自两个工具的官方文档&…

高可用 - 05 Keepalived配置(全局配置、VRRPD、LVS)

文章目录PreKeepalived的全局配置Keepalived的VRRPD配置VRRP同步组配置VRRP实例配置Keepalived的LVS配置TCP_CHECKHTTP_GET & SSL_GETMISC_CHECKPre 高可用 - 04 Keepalived编译安装 高可用 - 04 Keepalived编译安装安装Keepalived的过程中&#xff0c;指定了Keepalived配…

Chrome访问新版bing(玄学,需要魔法)

文章目录前提1. 需要魔法2. 申请过使用新版bing&#xff0c;并且收到通过的邮件。没有的话先申请&#xff0c;加入waiting list&#xff08;不赘述&#xff0c;自行百度&#xff09;配置1. Chrome安装插件&#xff08;Header Editor&#xff09;2. Header Editor添加规则3. 允许…

PaddleOCR遇到 lanms-neo问题处理

在window环境中安装PaddleOCR依赖是真的蛋疼&#xff0c;关键官方论坛里也都没有具体的解决方案。吐槽。。。吐槽。。。 我在 “windows安装lanms-neo问题处理”文章中看到lanms-neo问题全过程解决。个人觉得文档说明不是很细致&#xff0c;导致我按步骤执行&#xff0c;还是安…

插上数据的翅膀,开启我升职加薪的梦想之旅

我是麦思思&#xff0c;大学毕业后就进入大厂工作并担任电子消费行业业务部门的数据分析师&#xff0c;对于一个数据分析师而言&#xff0c;Excel是必备技能&#xff0c;函数公式我能随手就来&#xff0c;几十M的文件处理那都是轻轻松松。但是&#xff0c;近几年随着企业业务发…

一种全新的图像变换理论的实验(五)——研究目的替代DCT和小波

一、前言 目前在大量的灰度图像测试下&#xff0c;基本确定变换系数ratio取值0-25之间时&#xff0c;逆变化后的图还能基本保障效果&#xff0c;而且越接近0效果越好。本文还是以lenna.bmp灰度图为例&#xff0c;实验不再逆变换&#xff0c;而是把变换后的数据直接输出为bmp的…