Java集合框架-1

news2025/1/19 17:02:18

目录

List集合

常见方法

迭代器(Iterator)

List集合特有方法

List 的特点

创建 List

遍历List


Java集合框架是Java编程语言提供的各种数据结构和算法的实现。它提供了不同类型的集合类,如列表(List)、集(Set)、映射(Map)等,以及一组接口和类来操作和处理集合数据。

Java集合框架的主要类和接口包括:

1. Collection接口:它是所有集合类的根接口,定义了集合对象的基本方法,如添加、删除、查询等。常见的实现类有List和Set。

2. List接口:它是有序的集合,允许重复元素。常见的实现类有ArrayList、LinkedList和Vector。

3. Set接口:它是无序的集合,不允许重复元素。常见的实现类有HashSet、TreeSet和LinkedHashSet。

4. Map接口:它是一种键值对的集合,每个元素包含一个键和一个值。常见的实现类有HashMap、TreeMap和LinkedHashMap。

集合框架提供了许多通用的方法,如add()、remove()和contains()等,以便操作集合中的元素。此外,它还提供了迭代器(Iterator)来遍历集合中的元素。

Java集合框架的好处包括:
- 提供了丰富的数据结构和算法的实现,方便开发者使用和操作集合数据。
- 统一了集合类的接口和方法,使得代码更加简洁、可读性更高。
- 提供了线程安全和高效的实现,能够处理大量数据和高并发情况。
- 可以与其他Java类库和框架很好地集成,提供更强大的功能和性能。

总之,Java集合框架是Java编程中非常重要和常用的一部分,它提供了大量的集合类和接口,方便开发者进行集合操作和处理。通过熟悉集合框架的使用,可以提高程序的开发效率和性能。

List集合

常见方法
 List 是一个接口,它是最基础的一种集合:它是一种有序列表。它的常用子类包括:

ArrayList:基于动态数组实现,支持随机访问。

LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。不仅如此,LinkedList 还可以用作栈、队列和双向队列。

Vector:和 ArrayList 类似,但它是线程安全的。

Stack:它实现了一个标准的后进先出的栈,是 Vector 的子类。
CopyOnWriteArrayList:一个线程安全的 ArrayList。


import java.util.ArrayList;
import java.util.List;

public class Arraylist_test01 {
    public static void main(String[] args) {
        new ArrayList<>();
        /**
         * new ArrayList<泛型>();
         */
        List<String> arrayList = new ArrayList<String>(); //右边的泛型可不写!

        arrayList.add("wo"); //向集合存入元素 , 但是要和定义的类型一样!
        arrayList.add("ni");
        arrayList.add("ta");

        //ArrayList 底层是基于数组的

        System.out.println(arrayList.size()); //ArrayList.size 方法可以清楚的看到集合中元素的数量! //3


        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(0)); //将下标为0的数组循环三次并打印出来!
        }
        System.out.println(arrayList.get(0) + arrayList.get(1) + arrayList.get(2)); // ArrayList.get方法 可以获取到集合中的元素!

//        System.out.println(arrayList.get(0) + arrayList.get(1) + arrayList.get(2) + arrayList.get(3)); //一定会报错的!获取的元素不能超过集合中的元素数量!


        System.out.println("-----------------------------------");
        String remove = arrayList.remove(2);
        System.out.println(remove); // ArrayList.remove 删除元素! //ta

//        System.out.println(arrayList.get(0) + arrayList.get(1) + arrayList.get(2)); // 会报错!因为下标为2的元素已经删除了!
        System.out.println(arrayList.size()); // 2  使用size方法,会得到集合中还有两个元素!!
    }
}




ArrayList.get : 获取集合中的元素
ArrayList.set : 替换集合中的元素
ArrayList.add : 给集合添加元素
ArrayList.remove : 删除集合中的元素
ArrayList.size   : 获取集合中元素的数量


迭代器(Iterator)
在 Java 中,迭代器(Iterator)是一种用于遍历集合(Collection)元素的接口。通过迭代器,可以依次访问集合中的每个元素,而无需了解集合内部的数据结构。使用迭代器可以实现对集合的遍历,并且在遍历的过程中可以进行删除操作,而不会出现并发修改异常。

通常,使用迭代器的基本流程如下:

1. 通过集合的 iterator() 方法获取迭代器对象。
2. 使用 hasNext() 方法判断是否还有下一个元素。
3. 使用 next() 方法获取下一个元素的值。
4. 在需要的时候可以使用 remove() 方法删除元素(可选操作)。

需要注意的是,迭代器是通过集合的 iterator() 方法获取的,不同的集合类(如ArrayList、LinkedList、HashSet等)都实现了iterator()方法,因此可以使用迭代器对不同类型的集合进行遍历操作。

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

public class IteratorExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

List集合特有方法


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

public class ArrayList_list {
    public static void main(String[] args) {

        //list接口中独有的方法
        Collection<String> collection = new ArrayList<>();
        collection.add("qq01");
        collection.add("qq02");
        collection.add("qq03");
        //在Collenction接口中,是没有get方法的、
        //java多态机制  -- 编译看左边的  而左边是Collection接口,没有get方法,所以运行报错!!

        //如果需要使用get方法,可以将Collection强转为List即可!
        List list = (List) collection;
//        System.out.println(list.get(0)); // 这样就可以使用get方法了!

        list.add("qq123");
//        System.out.println(list.size()); // 4

        list.remove(2);
//        System.out.println(list.size()); //3

        list.set(1, "weixin");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
    /**
     * collection 接口只是提供集合基本的方法
     * 具体实现的话使用List ArratList ,需要重写List接口!
     *
     * 1、List集合下都是有序的接口  根据存放顺序
     * 2、可以允许存放重复数据的,而set接口不允许!
     */
}


List 的特点
  • 使用 List 时,我们要关注 List 接口的规范。List 接口允许我们添加重复的元素,即 List 内部的元素可以重复:
1List<String> list = new ArrayList<>();

2list.add("apple");           // size=1

3list.add("pear");           // size=2

4list.add("apple");           // 允许重复添加元素,size=3

5System.out.println(list.size());                  // 结果为 3
  • List 还允许添加 null
1List<String> list = new ArrayList<>();

2list.add("apple");         // size=1

3list.add(null);               // size=2

4list.add("pear");         // size=3

5String second = list.get(1);                  // null

6System.out.println(second);            // 结果为 3

List集合的概念和特点

1、list集合是有序的,可以精确的控制列表中每个元素的插入位置!可以通过证书索引访问元素,并搜索列表中的元素!!

2、set集合是无序的,不允许存入重复的数据!

List集合的特点
有序:存储和取出的元素顺序一致!
可重复:存储的元素可以重复!

创建 List

除了使用 ArrayListLinkedListJDK9 及其以后的版本中,我们还可以通过 List 接口提供的 of() 方法,根据给定元素快速创建 List

1List<Integer> list = List.of(1, 2, 3);

注意:但是 List.of() 方法不接受 null 值,如果传入 null,会抛出 NullPointerException 异常。


遍历List

1、for循环:和数组类型,我们要遍历一个 List,完全可以用 for 循环根据索引配合 get(int) 方法遍历:

List<String> list = List.of("apple", "pear", "banana");
for (int i = 0; i < list.size(); i++) {
    String s = list.get(i);
    System.out.println(s);
}

2、迭代器:Iterator 对象有两个方法:boolean hasNext() 判断是否有下一个元素,E next() 返回下一个元素。因此,使用 Iterator 遍历 List 代码如下

List<String> list = List.of("apple", "pear", "banana");
for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
    String s = it.next();
    System.out.println(s);
}

3、加强版 for 循环:Javafor each 循环就可以帮我们使用 Iterator 遍历。把上面的代码再改写如下:

List<String> list = List.of("apple", "pear", "banana");
for (String s : list) {
    System.out.println(s);
}

练习:

import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class Solution {
    public void myMethod() throws Exception{
        List<String> list = new ArrayList<>();
        list.add("apple");
        list.add("pear");
        list.add("banana");
        System.out.println("使用普通的for循环遍历:");
        for (int i=0; i<list.size(); i++) {
            String s = list.get(i);
            System.out.println(s);
        }

        System.out.println("使用迭代器Iterator遍历:");
        for (Iterator<String> it = list.iterator(); it.hasNext(); ) {
            String s = it.next();
            System.out.println(s);
        }

        System.out.println("使用增强版for循环:");
        for (String s : list) {
            System.out.println(s);
        }
    }
}

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

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

相关文章

iOS通过p12导出公钥失败

通过p12文件导出证书crt文件一直报invalid password错误。 adminJiaozl Downloads % openssl pkcs12 -in ce.p12 -clcerts -nokeys -out MyCertificate.crt Enter Import Password: Mac verify error: invalid password?解决&#xff1a; 在 https://developer.apple.com/acc…

MongoDB文档插入

文章目录 MongoDB文档插入对比增删改查文档插入 MongoDB写安全机制非确认式写入 MongoDB文档查询参数说明查询操作符比较查询操作符逻辑查询操作符元素查询操作符数组查询操作符 模糊查询区别:$regex操作符中的option选项 MongoDB游标介绍游标函数手动迭代游标示例游标介绍 Mon…

AMC8美国数学思维竞赛2000-2024年真题练一练,你能做对几道?

为帮助备考AMC8美国数学竞赛的孩子们了解比赛的题型&#xff0c;掌握相关的知识&#xff0c;我会陆续分享2000-2024年的比赛真题&#xff0c;每道题都有解析&#xff0c;帮助孩子们不但会做题&#xff0c;还掌握背后的知识&#xff0c;从而达到举一反三的效果&#xff0c;提升比…

QT-LCD模拟显示

QT-LCD模拟显示 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "lcd_widget.h" #include <QDebug> #include <QPainter>LCDWidget::LCDWidget(QWidget *parent) : QWidget(parent),display(nullptr), display_char_buffer(…

LeetCode JS专栏刷题笔记(二)

一、前言 LeetCode - JavaScript 专栏刷题笔记第二篇。 第一篇刷题笔记详见&#xff1a;LeetCode JS专栏刷题笔记&#xff08;一&#xff09; 二、算法题目 1. 复合函数 LeetCode地址&#xff1a;2629. 复合函数 请你编写一个函数&#xff0c;它接收一个函数数组 [f1, f2, …

Mac清理系统垃圾软件CleanMyMac X2025免费版本下载

嘿&#xff0c;Mac用户们&#xff0c;你是否经常感觉你的Mac就像是在背着一个沉重的包袱在跑步&#xff1f;是的&#xff0c;我在说那些堆积如山的系统垃圾。清理这些垃圾不仅可以让你的Mac跑得更快&#xff0c;还能让它“呼吸”更畅快。今天&#xff0c;让我们一起来探索如何M…

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用

MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化&#xff0c;便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文&#xff1a;https://arxiv.org/p…

代码智能生成插件‘通义灵码‘使用指南

介绍 通义灵码&#xff0c;通义灵码&#xff0c;是阿里云出品的一款基于通义大模型的智能编码辅助工具&#xff0c;提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力&#xff0c;并针对阿里云的云服…

相机图像质量研究(36)常见问题总结:编解码对成像的影响--块效应

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

Leo赠书活动-16期 名校毕业生教材

Leo赠书活动-16期 名校毕业生教材 ✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠…

STM32的SDIO

一.SDIO简介 SDIO&#xff0c;全称Secure Digital Input/Output&#xff0c;是一种用于在移动设备和嵌入式系统中实现输入/输出功能的接口标准。它结合了SD卡的存储功能和I/O功能&#xff0c;允许设备通过SD卡槽进行数据输入输出和外围设备连接。 SDIO接口通常被用于连接各种…

基于SSM的在线教学质量评价系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的在线教学质量评价系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spri…

java中容易被忽视的toString()方法

之前一直认为toString就是将数据转换成字符类型&#xff0c;直到最近写出了一个bug才对toString有了新的认识 不同数据类型&#xff0c;toString() 有不同的操作 定义一个student类&#xff0c;包含姓名 String类型、性别 String类型、年龄 int 类型、分数列表 String类型的li…

网络安全工程师必知的WEB知识

作为一名网络安全工程师&#xff0c;尤其是WEB渗透测试工程师&#xff0c;必须掌握一些WEB相关的基础知识&#xff0c;下面重点从WEB服务架构、浏览器请求过程、服务器操作系统、WEB应用服务器、数据库系统、动态网站脚本语言、WEB前端框架等。 1. Web服务架构 Web服务主要分…

sensitive-word v0.13 特性版本发布 支持英文单词全词匹配

拓展阅读 sensitive-word-admin v1.3.0 发布 如何支持分布式部署&#xff1f; sensitive-word-admin 敏感词控台 v1.2.0 版本开源 sensitive-word 基于 DFA 算法实现的高性能敏感词工具介绍 更多技术交流 业务背景 对于英文单词 Disburse 之类的&#xff0c;其中的 sb 字母会被…

【Qt学习】QWidget的windowOpacity属性介绍与实例使用(双重检查的引入)

文章目录 1. windowOpacity 介绍2. 使用实例3. 题外话 - 双重检查&#xff08;doubleCheck&#xff09;代码资源 1. windowOpacity 介绍 我们可以查阅qt的官方文档&#xff0c;进行总结&#xff1a; windowOpacity() 表示窗口的不透明度级别。有效的范围是从1.0&#xff08;完…

学习总结19

# 奶牛的耳语 ## 题目描述 在你的养牛场&#xff0c;所有的奶牛都养在一排呈直线的牛栏中。一共有 n 头奶牛&#xff0c;其中第 i 头牛在直线上所处的位置可以用一个整数坐标 pi(0< pi < 10^8) 来表示。在无聊的日子里&#xff0c;奶牛们常常在自己的牛栏里与其它奶牛交…

【天衍系列 05】Flink集成KafkaSink组件:实现流式数据的可靠传输 高效协同

文章目录 01 KafkaSink 版本&导言02 KafkaSink 基本概念03 KafkaSink 工作原理1.初始化连接2.定义序列化模式3.创建KafkaSink算子4.创建数据源5.将数据流添加到KafkaSink6.内部工作机制 04 KafkaSink参数配置05 KafkaSink 应用依赖06 KafkaSink 快速入门6.1 包结构6.2 项目…

《Solidity 简易速速上手小册》第5章:智能合约的安全性(2024 最新版)

文章目录 5.1 安全性的重要性5.1.1 基础知识解析深入理解安全性的多维度影响智能合约安全的关键要素 5.1.2 重点案例&#xff1a;防止重入攻击案例 Demo&#xff1a;构建一个防重入的提款合约案例代码WithdrawContract.sol 测试和验证拓展功能 5.1.3 拓展案例 1&#xff1a;预防…

设计模式二:代理模式

1、什么是动态代理 可能很多小伙伴首次接触动态代理这个名词的时候&#xff0c;或者是在面试过程中被问到动态代理的时候&#xff0c;不能很好的描述出来&#xff0c;动态代理到底是个什么高大上的技术。不方&#xff0c;其实动态代理的使用非常广泛&#xff0c;例如我们平常使…