java基础 之 集合与栈的使用(一)

news2024/9/23 15:22:21

文章目录

      • 集合
        • 特点(从整体性来看)
        • 区别
        • List接口
          • (一)实现类:ArrayList
          • (二)实现类:LinkedList

集合

  • java集合可分为Set、List、Queue和Map四种体系。
  • 其中List、Set、Queue均继承自Collection接口
    在这里插入图片描述
特点(从整体性来看)
  • 不固定大小
  • 不固定元素类型
  • 多样的实现:如List、Set、Map等,每种都有其特定的特性,后续文章会说明
  • 可以使用泛型来指定其存储元素的类型
  • 支持迭代器
区别
  • 集合与数组的比较
数组int[]集合
长度固定可变
内容类型基本类型&引用类型引用类型
内容必须为同一种类型可以存储不同类型的(一般是同一种)
元素多少无法获知,length只是容量通过size()方法获取
实现方式顺序表有链表和数组等
List接口
(一)实现类:ArrayList
  • 特点

    • ArrayList是List接口的一个实现类
    • ArrayList内部封装了一个Object类型的对象
    • ArrayList是动态数组,初始长度为10,可动态扩容
    • ArrayList线程不安全
  • ArrayList集合的一些方法

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Random;
    
    public class Main {
        public static void main(String[] args) {
            Random random = new Random();
            List<Integer> list = new ArrayList<>();
            for(int i=0;i<20;i++){
                // .add(Object element) 向列表的尾部添加指定的元素。
                list.add(random.nextInt(100) );
            }
            // .iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器。
            Iterator<Integer> iterator = list.iterator();
            while(iterator.hasNext()){
                System.out.print(iterator.next()+" ");
            }
            // .size() 返回列表中的元素个数。
            System.out.println(list.size());
            // .get(int index) 返回列表中指定位置的元素,index从0开始。
            System.out.println(list.get(12));
            // .add(int index, Object element) 在列表的指定位置(从0开始)插入指定元素
            list.add(0,99999);
            // .set(int i, Object element) 使用元素element替换索引i位置的元素,并返回替换元素。
            list.set(1,66666);
    
            // .isEmpty() 判断列表是否包含元素,不包含元素则返回 true,否则返回false。
            System.out.println(list.isEmpty());
            // .contains(Object o) 如果列表包含指定的元素,则返回 true。
            System.out.println(list.contains(99999));
            // .remove(int index) 移除列表中指定位置的元素,并返回被删元素,删除位置后面的元素(如果有)向前移动。
            list.remove(19);   // 删除的是索引为19的值
            // .remove(Object o) 从List集合中移除第一次出现的指定元素,移除成功返回true,否则返回false。当且仅当List集合中含有满(o==null ? get(i)==null : o.equals(get(i)))条件的最低索引i的元素时才会返回true。
            System.out.println(list.indexOf(12));  // 获取元素的索引值
            int element = 19;
            list.remove(element); // 如果要删除的元素也是Integer的时候,需要这么操作。这个删除的是值19
            // .clear() 从列表中移除所有元素。
            list.clear();
        }
    }
    
    ----------补充两个解决线程不安全的方法-------------
    
    List<Integer> list = new ArrayList<>(); // 上边所用
    // 方法一
    List<Integer> list = Collections.synchronizedList(new ArrayList<>());
    // 方法二
    List<Integer> list = new CopyOnWriteArrayList<>();
    
    

    1、运行结果自己看吧,这里就不放了
    2、注意remove方法,如果数组中的元素类型也正好是Integer时,需要对删除的这个元素外部创建个对象。
    3、自己去试试这个线程安全的方法吧

  • 时间复杂度

    1、末尾添加add(),平常是O(1),如果数组扩容,则为O(N)
    2、指定位置插入add()、删除指定位置元素remove(),移动元素,平均为O(N)
    3、获取指定位置元素get()、替换指定位置元素set(),为O(1)
    (所说的查询快)
    4、查找元素contains()、查找元素索引indexOf(),为O(N)

(二)实现类:LinkedList
  • 特点

    • LinkedList是List接口的一个实现类
    • LinkedList内部封装了一个双向链表
    • LinkedList的增删快,查询慢
    • LinkedList线程不安全
  • LinkedList集合的一些方法

    import java.util.LinkedList;
    import java.util.Random;
    
    public class TestLinkedList {
        public static void main(String[] args) {
            LinkedList list = new LinkedList<>();
            // add(Object element) 它将元素附加到列表的末尾。返回类型为boolean
            Random random = new Random();
            for(int i=0;i<20;i++){
                list.add(random.nextInt(100));
            }
            System.out.println(list);
    
            // add(int index,Object element),指定位置插入。返回类型为boolean
            list.add(1,999);
            // addFirst(E element),元素附加到列表的头部。方法返回为为void
            list.addFirst(8888);
            // addLast(E  element) 元素附加到列表的尾部。方法返回为void
            list.addLast(66666);
            System.out.println(list);
            // get(int index) 根据下标获取数据。返回类型为元素的类型
            System.out.println(list.get(1));
            // getFirst() 它返回链表的第一个元素
            System.out.println(list.getFirst());
            // getLast() 它返回链接列表的最后一个元素
            System.out.println(list.getLast());
            // contains(Object element)如果元素存在于列表中,则返回true。
            System.out.println(list.contains(12));
            // set(int index,Object element)它用于用新元素替换列表中的现有元素。返回类型为修改前的元素
            System.out.println(list.set(20,222222));
            // remove()  删除第一个元素并返回
            System.out.println(list.remove());
            // remove(int location)  删除指定位置的元素并返回该元素
            System.out.println(list.remove(3));
            // removeFirst() 删除并返回链接列表的头部一个元素
            System.out.println(list.removeFirst());
            // removeLast() 删除并返回链接列表的尾部一个元素
            System.out.println(list.removeLast());
            // iterator接口
            Iterator<Integer> iterator = list.iterator();
            while (iterator.hasNext()){
                System.out.print(iterator.next()+" ");
            }
            // size() 获取链表长度
            System.out.println(list.size());
            // clear():它删除列表中的所有元素
            list.clear();
        }
    }
    

    1、方法都比较简单,可以复制自己运行吧
    2、注意set方法,返回的数值是修改前的值
    3、解决线程不安全的方法同上ArrayList

  • 时间复杂度

    1、插入add()、删除remove()、长度size()时间复杂度:O(1)
    2、查找get()时间复杂度为O(N)

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

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

相关文章

ADC静态误差

0 前言 图1 表示测量数据精密度高&#xff0c;但准确度较差&#xff1b;图2 表示测量数据的准确度高&#xff0c;但精密度差&#xff1b;图3 表示测量数据精密度和准确度都好&#xff0c;即精确度高。 1 简介 模数转换器&#xff08;ADC&#xff09;广泛用于各种应用中&…

Spring Cloud开发实战(一)- 搭建一个Eureka+Feign+LoadBalancer 项目

Spring Cloud开发实战&#xff08;一&#xff09;- 搭建一个EurekaFeignLoadBalancer 项目 文章目录 Spring Cloud开发实战&#xff08;一&#xff09;- 搭建一个EurekaFeignLoadBalancer 项目0.内容简介1.Eureka服务注册与发现1.1.什么是服务注册与发现1.2.Eureka注册中心1.2.…

Android 系统与SDK和JDK版本对照表

Android 系统与SDK和JDK版本对照表 传说中的兼容问题是指在高版本 SDK 平台开发的软件&#xff0c;可能在低版本 Android 系统中运行时出现各种问题。而低版本 SDK 开发的软件在高版本 Android 系统中运行时基本没有兼容问题的。 Android版本SDK/API版本JDK版本备注Android 14…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…

unplugin-vue-components 插件配置 忽略 部分目录下的组件自动导入

背景 vue3 项目 为了省略 第三方库ui 组件 全局组件的注册代码&#xff0c;使用了 unplugin-vue-components 插件 原理 组件识别 在编译阶段&#xff0c;unplugin-vue-components 会扫描 Vue 单文件组件&#xff08;.vue 文件&#xff09;的模板部分&#xff0c;识别出所有使…

从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! 大家好,我是小米,今天我们来聊一聊操作系统中的一个重要话题——进程间通信(Inter-Process Communication,简称IPC)。IPC是指在不同进程间传递数据…

01.docker安装、配置、常用命令、dockerfile、镜像上传下载和Harbor仓库搭建

1.docker安装 1.1移除旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2安装yum-utils获取yum-config-manager [rootlocalhost ~]# yum install -y yum-utils …

图论之最短路径问题(朴素Dijksra算法\堆优化版Dijksra算法\Bellman-Ford\SPFA)

朴素Dijskra算法 时间复杂度&#xff1a;,适用于稠密图&#xff0c;需要用邻接矩阵来存储。 算法描述 设起点为s,dist[v] 表示起点到v点的最短距离。 a)初始化 dist[v]INF(v!s),dist[s] 0 这里一共有n个点&#xff0c;第一个点(起点)初始化为0&#xff0c;其余都初始化为in…

COFFEE AI PARTNER -- 神奇的AI工具,相当我雇佣了一个AI员工,淘汰你的是会使用AI的人

COFFEE AI PARTNER介绍 COFFEE AI PARTNER是由 AI JAVA开发的一款生成式人工智能工具&#xff08;又名AI助手&#xff09;&#xff0c;尝试一下。 首先域名似乎正在备案中&#xff0c;企业邮箱似乎正在采购&#xff0c;目前服务地址是&#xff1a;COFFEE AI PARTNER-官网 官网…

基于JSP技术的教学质量评价系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeans 工具&#xff1a;MyEclipse、Tomcat、Navicat 系统展示 首页 管理员功能模块 学生功…

前端面试:八股文系列(一)

更多详情&#xff1a;爱米的前端小笔记&#xff08;csdn~xitujuejin~zhiHu~Baidu~小红shu&#xff09;同步更新&#xff0c;等你来看&#xff01;都是利用下班时间整理的&#xff0c;整理不易&#xff0c;大家多多&#x1f44d;&#x1f49b;➕&#x1f914;哦&#xff01;你们…

大学新生入门编程的最佳路径

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

微服务架构三大利器:限流、降级与熔断

文章目录 前言一、限流&#xff08;Rate Limiting&#xff09;二、降级&#xff08;Degradation&#xff09;三、熔断&#xff08;Circuit Breaker&#xff09;四、三者关系总结 前言 限流、降级和熔断是分布式系统中常用的容错策略&#xff0c;它们各自承担着不同的角色&#…

5.Gateway-微服务统一网关

5.Gateway-微服务统一网关 1.为什么需要网关2.Spring Cloud Gateway2.1 引入依赖2.2 编写启动类2.3 配置路由规则2.4 路由断言&#xff08;Predicates&#xff09;2.5 过滤器&#xff08;Filters&#xff09;2.6 熔断机制 1.为什么需要网关 统一访问入口&#xff1a;在微服务架…

【微分方程——高数】

7.二阶常系数非齐次线性微分方程&#xff08;重点&#xff09; 8.欧拉方程&#xff08;重点&#xff09;

Prompt提示工程上手指南:基础原理及实践-Prompt个性知识库引导

前言 Prompt系列的第二期文章已经将所有的Prompt工程主流策略讲解完毕&#xff0c;共涉及到六种Prompt类别模型以及具体生产内容详解。再结合系列第一篇文章具体对Prompt工程的详细介绍&#xff0c;也就可以达到Prompt工程师的初步入门&#xff0c;现在如果掌握了这些基础技能…

缓存击穿

概念 缓存击穿问题也叫热点key问题&#xff0c;指的是一个被高并发访问并且缓存重建业务较为复杂的key突然失效了&#xff0c;大量的请求会到达数据库给数据库带来巨大的冲击。 常见解决方法有两种&#xff1a;互斥锁&#xff0c;逻辑过期。 优缺点 &#xff1a; 基于互斥锁的…

Python多进程:如何在不依赖Queue的情况下传递结果

随着数据的爆炸式增长&#xff0c;网络爬虫成为获取信息的强大工具。在爬取大量数据时&#xff0c;多进程技术可以显著提高效率。然而&#xff0c;如何在多进程中传递结果&#xff0c;而不依赖Queue&#xff0c;成为了一个值得探讨的问题。本文将以采集抖音短视频为案例&#x…

web框架:Django进阶(一)

文章目录 django进阶内容回顾1.模板1.1 寻找html模板顺序1.2 模板处理的本质1.3 常用语法1.4 内置函数1.5 自定义模板功能1.6 继承和母版1.7 模板的导入 2.django中间件2.1 原始方式2.2 MiddlewareMixin&#xff08;建议&#xff09;2.3 prcess_request的执行时&#xff0c;是否…

【系统设计】软件项目概要设计说明书(2024原件完整版)

1引言 1.1编写目的 1.2项目背景 1.3参考资料 2系统总体设计 2.1整体架构 2.2整体功能架构 2.3整体技术架构 2.4运行环境设计 2.5设计目标 3系统功能模块设计 3.1个人办公 3.2系统管理 4性能设计 4.1响应时间 4.2并发用户数 5接口设计 5.1接口设计原则 5.2接口实现方式 6运行设计…