java 数据结构ArrayList类

目录

什么是List

线性表

顺序表

ArrayList类

ArrayList无参方法

ArrayList有参方法

?通配符

ArrayList 的remove方法

ArrayList 的subList方法

Iterator:迭代器

使用ArrayList完成杨辉三角


什么是List

在集合框架中,List是一个接口,继承自Collection

注意:List是个接口,并不能直接用来实例化

Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示:

List中提供好了的方法,具体如下:


线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列...

线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物 理上存储时,通常以数组和链式结构的形式存储。

顺序表

其实是一个动态扩容的数组

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改

接口的实现:

public class SeqList {
private int[] array;
private int size;
// 默认构造方法
SeqList(){ }
// 将顺序表的底层容量设置为initcapacity
SeqList(int initcapacity){ }
// 新增元素,默认在数组最后新增
    public void add(int data) { }
// 在 pos 位置新增元素
    public void add(int pos, int data) { }
// 判定是否包含某个元素
    public boolean contains(int toFind) { return true; }
// 查找某个元素对应的位置
    public int indexOf(int toFind) { return -1; }
// 获取 pos 位置的元素
    public int get(int pos) { return -1; }
// 给 pos 位置的元素设为 value
    public void set(int pos, int value) { }
//删除第一次出现的关键字key
    public void remove(int toRemove) { }
// 获取顺序表长度
    public int size() { return 0; }
// 清空顺序表
    public void clear() { }
// 打印顺序表,注意:该方法并不是顺序表中的方法,为了方便看测试结果给出的
    public void display() { }
}


ArrayList类

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:

说明

1. ArrayList是以泛型方式实现的,使用时必须要先实例化

2. ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问

3. ArrayList实现了Cloneable接口,表明ArrayList是可以clone的

4. ArrayList实现了Serializable接口,表明ArrayList是支持序列化的

5. 和Vector不同,ArrayList不是线程安全的,在单线程下可以使用,在多线程中可以选择Vector或者CopyOnWriteArrayList

6. ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表


ArrayList无参方法

无参一开始的时候没有分配内存,当调用add方法的时候才分配内存,因为底层代码进行扩容等一系列操作

    public static void main2(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(0, 99);

        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();
        System.out.println(list);

结论:

第一次Add的是会分配大小为10的内存

对于ArrayList来说,都是以1.5倍进行扩容


ArrayList有参方法

简单点说把一整个集合的一组内容拿过来填充到link里

    public static void main3(String[] args) {
        LinkedList<Integer> link = new LinkedList<>();
        link.add(1);
        link.add(2);
        link.add(3);

        ArrayList<Number> list2 = new ArrayList<>(link);
        list2.add(21);
        list2.add(22);
        System.out.println(list2);

下面通配符中解释了有参方法的传递以及注意的点

?通配符

?就是你传入的变量的指定的泛型类型就是图中list的Integer

E就是图中的list12的泛型类型Number

c就是List

只要实现了Collection接口的都能传,还有传入的类型得是list12 Number的子类或者本身


ArrayList 的remove方法

在使用 remove(Object o) 方法从列表中移除特定对象时,需要传递一个与要移除的对象逻辑上相等的新对象作为参数。这是因为 remove(Object o) 方法会根据对象的相等性来确定要移除的元素

    public static void main5(String[] args) {
        LinkedList<Integer> link = new LinkedList<>();
        link.add(1);
        link.add(2);
        link.add(3);

        ArrayList<Number> list2 = new ArrayList<>(link);
        list2.add(21);
        list2.add(22);
        System.out.println(list2);

        list2.remove(2);
        list2.remove(new Integer(2));
        System.out.println(list2);

    }


ArrayList 的subList方法

    public static void main7(String[] args) {
        LinkedList<Integer> link = new LinkedList<>();
        link.add(1);
        link.add(2);
        link.add(3);

        //不会产生新的对象
        List<Integer> link1 = link.subList(1, 3);
        System.out.println(link1);
        link1.set(0, 99);
        System.out.println(link1);
        System.out.println(link);
    }

如图所示subList方法不是创建一个新的arraylist对象,subList 返回的对象实际上是原始列表的一个引用,它指向原始列表中指定范围的元素,简单说就是把那一段的地址给到了list1


Iterator:迭代器

public static void main11(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);

        //迭代器
        Iterator<Integer> it = list.iterator();
        //Iterator<Integer> it1 = list.listIterator();
        while (it.hasNext()) {
            System.out.print(it.next() + " ");
        }
        System.out.println();
    }

使用ArrayList完成杨辉三角

public class Test {
    //杨辉三角
    public static List<List<Integer>> generate(int numRows) {

        List<List<Integer>> ret = new ArrayList<>();//二维数组

        List<Integer> list = new ArrayList<>();//第一行
        list.add(1);
        ret.add(list);//把第一行数据存进二维数组里

        //从第二行开始
        for (int i = 1; i < numRows; i++) {
            List<Integer> curRow = new ArrayList<>();//当前行
            curRow.add(1);//第一个下标设置为1

            List<Integer> preRow = ret.get(i - 1);//上一行

            //下标从一开始,因为已经设置了第一个下标了
            for (int j = 1; j < i; j++) {
                int val = preRow.get(j) + preRow.get(j - 1);
                curRow.add(val);//存进当前行
            }
            curRow.add(1);//当前行循环结束后,最后一个下标设置为1
            ret.add(curRow);//然后把当前添加到ret二维数组里
        }
        return ret;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue 向某个网址 传递数据

1. 需求 现在有一个网站需要 配置上另一个网站的东西 类似这样的东西吧 就是我需要再一个网站上 右边或者其他地方 放另一个页面的地址 这个地址需要给我传递东西 或我这个网站给其他的网站传递token了 id等 2.解决 window.parent.postMessage({ token: loginRes.token, id:…

第5个-模糊加载

Day 5 - Blurry Loading 1. 项目展示 2. 分析思路 变化过程 数字从 0 不断增长到 100&#xff1b;中间的百分比数字逐渐消失&#xff0c;即透明度 opacity 从 1 到 0&#xff1b;背景图片从模糊变为清晰&#xff0c;滤镜 filter.blur()的参数设置为从 30px 到 0px。 小 tips…

点云旋转(基于PCL)

实现代码为&#xff1a; //以中心化点进行旋转double theta atan(maindirection.a);//计算的是弧度单位for (int i 0; i < origipts.size(); i){pcl::PointXYZ tempone;tempone.x aftercenerlizepts[i].x*cos(theta) aftercenerlizepts[i].y*sin(theta) center.x;temp…

Hive调优——合并小文件

目录 一、小文件产生的原因 二、小文件的危害 三、小文件的解决方案 3.1 小文件的预防 3.1.1 减少Map数量 3.1.2 减少Reduce的数量 3.2 已存在的小文件合并 3.2.1 方式一&#xff1a;insert overwrite (推荐) 3.2.2 方式二&#xff1a;concatenate 3.2.3 方式三&#xff…

【Zigbee课程设计系列文章】Zigbee开发环境搭建

【Zigbee课程设计系列文章】Zigbee开发环境搭建 前言IAR 下载安装Z-Stack协议栈安装 &#x1f38a;项目专栏&#xff1a;【Zigbee课程设计系列文章】&#xff08;附详细使用教程完整代码原理图完整课设报告&#xff09; 前言 &#x1f451;由于无线传感器网络&#xff08;也即…

RMSNorm原理及代码

RMSNorm原理及代码 在大模型中使用层归一化有如下几个因素&#xff1a; 改善网络稳定性加速收敛速度提高模型的泛化能力 批量归一化是对一个批次内的数据进行归一化 层归一化是对一个样本中的不同特征进行归一化 如下是LayerNorm与RMSNorm的公式 在LLaMA中使用RMSNorm替代…

【华为云】容灾方案两地三中心实践理论

应用上云之后&#xff0c;如何进行数据可靠性以及业务连续性的保障是非常关键的&#xff0c;通过华为云云上两地三中心方案了解相关方案认证地址&#xff1a;https://connect.huaweicloud.com/courses/learn/course-v1:HuaweiXCBUCNXI057Self-paced/about当前内容为灾备常见理论…

NARF关键点提取原理简介

一、NARF2D边缘点探测的矩形平面的边长s和计算点p和上邻域的距离所用的k值 二、障碍物边缘和阴影边缘 三、NARF边缘点探测 四、NARF借助边缘点信息进行关键点检测 本人也是参考其他博主&#xff0c;以及这份英文文献写的(毕竟是英文文献&#xff0c;部分翻译肯定有些误差&…

企业计算机服务器中了mkp勒索病毒怎么办?Mkp勒索病毒解密处理

随着网络技术的不断发展&#xff0c;企业的生产运营也加大了步伐&#xff0c;网络为企业的生产运营提供了强有力保障&#xff0c;但网络是一把双刃剑&#xff0c;给企业带来便利的同时也为企业带来了严重的数据威胁。春节期间&#xff0c;云天数据恢复中心接到很多企业的值班人…

反序列化漏洞(一)Shiro漏洞CVE-2016-4437复现

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、前言 春节后第一篇&#xff0c;祝大家龙年一切顺利&…

MySQL-运维

一、日志 1.错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当mysql启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关性息。当数据库出现任何故障导致无法正常使用时&#xff0c;建议首先查看此日志。 该日志是默认开启的&#xf…

国产制造,欧美品质:爱可声助听器产品质量获国际认可

随着科技的发展和全球化的推进&#xff0c;越来越多的中国制造产品开始走向世界舞台。其中&#xff0c;爱可声助听器凭借其卓越的产品质量&#xff0c;成为了国产制造的骄傲。 国产制造指的是在中国境内生产的产品&#xff0c;欧美品质则是指产品在设计、生产、质量控制等方面…

CSS3学习(一)

1. 语法规范 CSS主要由选择器和一条或多条的声明构成。 选择器用于指定CSS样式的HTML标签&#xff0c;花括号里面是对应的具体样式 属性与属性值以键值对的形式出现&#xff0c;属性与属性之间用分号隔开 <head>里写<style> 2. 基础选择器 【作用】选择标签使…

【计算机网络】FTP 文件传输协议

同样使用TCP 但使用了两个并行的TCP 控制链接 control connection 带外 out-of-band 传送的数据链接 data connection 对于FTP而言&#xff0c;控制链接贯穿了整个用户会话期间&#xff0c;数据链接每传输一个文件就有一次建立FTP是有状态&#xff08;state&#xff09;的&…

【从Python基础到深度学习】4. Linux常用命令(进阶)

接上篇 【从Python基础到深度学习】4. Linux 常用命令-CSDN博客 1.文件查找 - find 命令 find [搜索路径] [搜索条件] [操作]1.1 常用选项和参数 -name&#xff1a;按文件名搜索。 find 命令的 -name 选项可以接受通配符来匹配文件名。通配符可以帮助你更灵活地搜索文件名&a…

【Web】NSSCTF Round#18 Basic个人wp(部分)

目录 ①门酱想玩什么呢&#xff1f; ②Becomeroot ①门酱想玩什么呢&#xff1f; 先试一下随便给个链接 不能访问远程链接&#xff0c;结合评论区功能&#xff0c;不难联想到xss&#xff0c;只要给个评论区链接让门酱访问就可 我们研究下评论区 从评论区知道&#xff0c;要…

建立知识体系,这份指南就够了

最近&#xff0c;许多读者私信我&#xff0c;问到这个问题。 恰好又要推送了&#xff0c;索性分享一些心得。 说实话&#xff0c;这是个很大的问题&#xff0c;要彻底讲透&#xff0c;大概得写一整本书。 所以&#xff0c;我尝试用尽量简洁的篇幅&#xff0c;将这个问题说清楚。…

Redis进阶(二):事务

redis事务特点 弱化的原子性 redis事务的原子性不像MySQL原子性一样&#xff0c;执行不成功的话&#xff0c;redis事务不会进行回滚操作 不具备一致性 redis没有约束&#xff0c;也没有回滚机制&#xff0c;因此事务执行的过程中如果某个修改操作出现失败&#xff0c;就可能引起…

研究多态恶意软件,探讨网络安全与AI

前言 近期ChatGPT火遍全球&#xff0c;AI技术被应用到了全球各行各业当中&#xff0c;国内外各大厂商也开始推出自己的ChatGPT&#xff0c;笔者所在公司在前段时间也推出了自研的安全GPT&#xff0c;AI技术在网络安全行业得到了很多的应用&#xff0c;不管是网络安全研究人员、…

ClickHouse--05--MergeTree 表引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 MergeTree 系列表引擎前言MergeTree 系列表引擎 --功能MergeTree 系列表引擎 --种类 1.MergeTree1.1MergeTree 建表语句&#xff1a;1.2 MergeTree 引擎表目录解析查…