JavaSE20-集合1-list

news2024/9/24 19:14:24

文章目录

  • 一、集合概念
  • 二、list集合
    • 1、list集合特点
    • 2、ArrayList
      • 2.1 创建对象
      • 2.2 常用方法
      • 2.3 遍历
        • 2.3.1 使用索引遍历
        • 2.3.2 使用迭代器遍历
        • 2.3.3 使用foreach遍历
        • 2.3.4 集合转换为数组遍历
    • 3、LinkedList
      • 3.1 创建对象
      • 3.2 常用方法
      • 3.3 遍历
    • 4、ArrayList和LinkedList的区别

一、集合概念

  1. 集合就是用于存储多个数据的容器。相对于具有相同功能的数组来说,集合的长度可变会更加灵活方便。
  2. 集合主要有两个顶层接口,Collection和Map。
    在这里插入图片描述

二、list集合

1、list集合特点

  1. 有索引
  2. 可以存储重复元素
  3. 元素存入的顺序和实际存储的顺序相同

2、ArrayList

2.1 创建对象

ArrayList list = new ArrayList<>(); //不限定集合中存放元素的数据类型
ArrayList<集合元素的数据类型> list2 = new ArrayList<>();//限定集合中存放元素的数据

2.2 常用方法

  1. boolean add(E e) //添加元素,直接添加到集合的末尾 返回值代表是否添加成功
  2. void add(int index, E element) //往指定索引位置添加元素
  3. boolean remove(Object o) // 删除元素
  4. E remove(int index) //删除指定索引位置的元素,返回值是被删除的元素
  5. E set(int index, E element) //修改指定索引位置的元素 返回值为修改之前的元素值
  6. E get(int index) //获取指定索引位置的元素 返回值为对应的元素
  7. int size() //获取集合中元素的个数
  8. boolean contains(Object o) //判断集合中是否存在某个元素 ,返回值代表是否存在

对集合用的最多的是add(),remove(), get(),set(),size()这几个方法。

2.3 遍历

2.3.1 使用索引遍历

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("三");
        list.add("更");
        list.add("草");
        list.add("堂");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

2.3.2 使用迭代器遍历

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("三");
        list.add("更");
        list.add("草");
        list.add("堂");
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }

注意:为了避免并发修改异常(ConcurrentModificationException)的出现。避免在使用迭代器遍历的过程中对集合进行操作。

2.3.3 使用foreach遍历

foreach是java提供的一个语法糖。可以让我们更方便的遍历集合或数组

  for(元素数据类型 变量名 : 遍历的集合或者数组){
        //遍历的时候会把遍历到的元素赋值给我们上面定义的变量
    }
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("三");
        list.add("更");
        list.add("草");
        list.add("堂");
        for (String s : list) {
            System.out.println(s);
        }
    }
        String[] arr = {"三","更","草","堂"};
        for(String s : arr){
            System.out.println(s);
        }

2.3.4 集合转换为数组遍历

list.toArray()

3、LinkedList

3.1 创建对象

LinkedList list = new LinkedList<>();  //不限定集合中存放元素的数据类型
LinkedList<集合元素的数据类型> list2 = new LinkedList<>();//限定集合中存放元素的数据类型

3.2 常用方法

  1. boolean add(E e) //添加元素,直接添加到集合的末尾 返回值代表是否添加成功
  2. void add(int index, E element) //往指定索引位置添加元素
  3. boolean remove(Object o) // 删除元素
  4. E remove(int index) //删除指定索引位置的元素,返回值是被删除的元素
  5. E set(int index, E element) //修改指定索引位置的元素 返回值为修改之前的元素值
  6. E get(int index) //获取指定索引位置的元素 返回值为对应的元素
  7. int size() //获取集合中元素的个数
  8. boolean contains(Object o) //判断集合中是否存在某个元素 ,返回值代表是否存在

我们发现上面这些方法其实和ArrayList中的常用方法都是相同的。因为LinkedList和ArrayList都是List接口的实现类,上面的很多方法都是他们共同的接口中定义的方法,所以都会有。下面是LinkedList的一些特有方法:

  1. void addFirst(E e) //把元素添加到集合的最前面
  2. void addLast(E e) //把元素添加到集合的最后面
  3. E removeFirst() //删除集合最前面的一个元素,返回值代表被删除的元素
  4. E removeLast() //删除集合最后面的一个元素,返回值代表被删除的元素
 public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        //添加元素
        list.add("更");
        list.add(0,"三");
        //删除元素
        list.remove("三");
        //修改元素
        list.set(0,"三更草堂");
        //获取元素
        String s = list.get(0);
        //获取集合大小
        int size = list.size();
        //判断元素是否存在
        boolean flag = list.contains("三更草堂");
    }
    
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("三");
        list.add("更");
        list.add("草");
        list.add("堂");

        list.addFirst("[");
        list.addLast("]");


        String s = list.removeFirst();
        System.out.println(s);
        String s1 = list.removeLast();
        System.out.println(s1);
    }

3.3 遍历

public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("三");
        list.add("更");
        list.add("草");
        list.add("堂");

        //遍历集合
        //for循环遍历
//        for (int i = 0; i < list.size(); i++) {
//            System.out.println(list.get(i));
//        }

        //迭代器
//        Iterator<String> it = list.iterator();
//        while (it.hasNext()){
//            String s = it.next();
//            System.out.println(s);
//        }

        //foreach
//        for(String s : list){
//            System.out.println(s);
//        }

        //转换为数组遍历
        String[] strings = list.toArray(new String[0]);
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }

4、ArrayList和LinkedList的区别

都是实现了List接口,不同点是底层存储数据的数据结构不同。ArrayList底层是用数组来存储,而LinkedList是链表。所以各自的特点也和数据结构的特点一样。

  1. ArrayList : 查找快,增删慢
  2. LinkedList: 增删快,查找慢

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

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

相关文章

支持DDR5,超频更简单,小雕够给力,技嘉B760M小雕WIFI主板上手

目前13代酷睿已经全员集结了&#xff0c;其中全新的i5 13490F应该依然会备受欢迎&#xff0c;当然了&#xff0c;刚上市不久的13代酷睿价格方面还不是很有吸引力&#xff0c;好在12代酷睿在新一代主板上面依然可用&#xff0c;所以预算有限的朋友&#xff0c;完全可用继续使用1…

原生微信小程序引入npm和安装Vant Weapp

目录一、引入npm安装Vant Weapp1、引入npm2、安装Vant Weapp3、修改 app.json4、修改 project.config.json二、构建npm一、引入npm安装Vant Weapp 环境&#xff1a;Windows10 开发工具&#xff1a;微信开发者工具 本地环境&#xff1a;已安装过node.js 1、引入npm cmd进入到你…

MyBatis源码分析(二、续)SqlSource创建流程,SQL如何解析?如何将#{id}变成?的

文章目录实例一、SqlSource处理入口二、SqlSource处理逻辑1、XMLScriptBuilder 构造方法2、解析动态sql3、DynamicSqlSource4、RawSqlSource解析sql&#xff08;1&#xff09;parse方法解析sql写在后面实例 此处我们分析的sql&#xff1a; <select id"selectBlog&quo…

|干货 | 五种常用类型之String字符串详解

一. 背景说明小白&#xff1a;哥&#xff0c;java中String是最常用类型&#xff0c;Redis中也是吗?哥&#xff1a;差不多&#xff0c;我给你稍微讲一下。二. 数据类型依据Redis官网&#xff0c;目前Redis数据类型共计九种。具体整理如下&#xff1a;常用的数据类型有&#xff…

第九章 实现isReactive和isReadonly

实现isReactive和isReadonly isReactive实现 先上测试用例&#xff08;其实这个测试用例也是reactive.spec.ts中追加的两个&#xff09;: import { isReactive, reactive } from "../reactive"describe(reactive,()>{it(happy path,()>{const original {fo…

taobao.item.sku.add( 添加SKU )

&#xffe5;开放平台免费API必须用户授权 新增一个sku到num_iid指定的商品中 传入的iid所对应的商品必须属于当前会话的用户 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求…

第十四节 包、权限修饰符、final、常量

包 1.同一个包下的类&#xff0c;相互可以直接访问。 2.不同包下的类要导包后才能访问。 AIT回车键导包。 权限修饰符 什么是权限修饰符? ●权限修饰符:是用来控制一个成员能够被访问的范围。 ●可以修饰成员变量&#xff0c;方法&#xff0c;构造器&#xff0c;内部类&…

并发就一定快吗?答:肯定不是啊

文章目录一、多线程概念1.1 程序的并发与并行1.1.1 程序的并行1.1.2 程序的并发1.2 进程与线程1.2.1 进程1.2.2 线程1.2.3 多线程并发就一定快吗&#xff1f;答案直接戳这里&#x1f449;&#xff1a;多线程并发就一定快吗&#xff1f; 一、多线程概念 在实际应用中&#xff…

车载测试之电子设备有哪些测试点?

现在车上大大小小的控制器大几十个&#xff0c;主机厂都要做哪些测试&#xff0c;满足哪些要求&#xff0c;才能使控制器达到量产要求呢&#xff1f; 整车开发流程 在聊测试之前&#xff0c;首先了解一下一款车的开发流程。在主机厂我们经常能听到“某某项目开G2阀”、“某某…

Java接口专题

基本介绍 接口给出一些没有实现的方法&#xff0c;封装到一起&#xff0c;到某个类使用时再根据具体情况把这些方法写出来。 注意&#xff1a;在jdk7之前&#xff0c;接口里所有的方法都是抽象方法。在jdk8之后接口中可以有静态方法&#xff0c;默认方法 interface 接口名{/…

Linux进程控制(进程终止+进程等待+进程程序替换)

文章目录&#xff1a;一、进程终止进程退出码常见的进程退出方法exit函数_exit函数returnexit vs _exit vs return二、进程等待进程等待的必要性进程等待的方法waitwaitpid - 从子进程获取状态信息如何获取子进程status进程的阻塞等待和非阻塞等待三、进程程序替换替换原理进程…

科技制造商必须对安全、设计选择承担更多责任

网络安全和基础设施安全局局长称当今商业网络安全的现状是"不可持续的"&#xff0c;公司、消费者和政府必须集体转变期望&#xff0c;让主要软件和硬件制造商对不安全的产品负责&#xff0c;而不是用户。 拜登政府预计将在未来几天发布一项战略&#xff0c;该战略将…

burp联动xray进行被动扫描

burp联动xray进行被动扫描0、简介1、打开burp&#xff0c;设置转发数据包&#xff0c;将burp抓到的数据包&#xff0c;额外转发到本机的7777端口2、出现这个代表配置成功3、接着在xray里输入这串代码&#xff0c;让xray进行监听本机的7777端口&#xff0c;进行被动扫描&#xf…

操作系统笔记、面试八股(二)—— 死锁

文章目录2. 死锁2.1 死锁的必要条件2.2 死锁预防2.3 死锁避免2.3.1 银行家算法2.4 死锁检测与死锁解除2.4.1 进程-资源分配图2.4.2 死锁检测的步骤2.4.3 死锁解除方法2. 死锁 2.1 死锁的必要条件 互斥 资源必须处于非共享模式&#xff0c;即因此只能有一个进程访问。如果有另一…

电脑崩溃蓝屏问题如何重装系统

电脑是我们日常生活和工作中必不可少的工具&#xff0c;但在使用过程中&#xff0c;难免会遇到各种问题&#xff0c;例如系统崩溃、蓝屏、病毒感染等&#xff0c;这些问题会严重影响我们的使用体验和工作效率。而小白一键重装系统可以帮助我们快速解决这些问题&#xff0c;本文…

精选博客系列|加速基于同态加密的隐私保护机器学习

随着机器学习在当今的企业和软件平台中的广泛使用&#xff0c;跨人工智能 &#xff08;AI&#xff09; 平台的隐私保护技术的解决方案也显得非常重要。虽然这个想法在今天看起来很明显&#xff0c;但人工智能研究社区历来更专注于打破数据孤岛的界限&#xff0c;并将数据从一个…

在线就能用的主图设计素材,免费分享!

如何给自己的店铺商品设计专属的节日活动主图&#xff1f;没有节日活动的主体素材要如何设计&#xff1f;下面小编就分享一个在线素材设计工具&#xff0c;打开乔拓云&#xff0c;平台里面不仅有许多能使用的电商设计素材&#xff0c;还有许多的设计工具和模板能帮助你快速的实…

macOS 13.3 Beta 2 (22E5230e)With OpenCore 0.8.9正式版 and winPE双引导分区原版镜像

原文地址&#xff1a;http://www.imacosx.cn/112340.html&#xff0c;转载需注明出处镜像特点完全由黑果魏叔官方制作&#xff0c;针对各种机型进行默认配置&#xff0c;让黑苹果安装不再困难。系统镜像设置为双引导分区&#xff0c;全面去除clover引导分区&#xff08;如有需要…

海外服务器:为什么越来越多的人选择跨境托管?

在数字化时代&#xff0c;越来越多的企业和个人需要一个高效、稳定、安全的网络服务。而以独立服务器为主的海外服务器和跨境托管服务已成为满足这种需求的重要选择。在本文中&#xff0c;小编将探讨海外服务器和跨境托管的优势和发展趋势。一、什么是海外服务器和跨境托管?海…

如何使用GitBleed从Git库镜像中提取数据

关于GitBleed GitBleed是一款针对Git库镜像的安全检测工具&#xff0c;该工具包含了多个Shell脚本&#xff0c;可以帮助广大研究人员下载克隆的Git库和Git库镜像&#xff0c;然后从中提取各种数据&#xff0c;并分析两者之间的不同之处。 功能介绍 工具提供的脚本能够克隆指…