Java:数据结构-List的介绍 ArrayList和顺序表(1)

news2024/12/23 5:32:22

一  List的介绍

1.什么是List?

List是一个接口,继承于Collection。

Collection也是一个接口

Lterable也是一个接口,表示实现该接口的类是可以逐个元素遍历的类。 

2.List的使用

List是一个接口,不能被实例化,ArrayList和LinkedList都实现了List接口。 

二 ArrayList和顺序表

在集合框架中ArrayList是一个普通的类,实现了List接口。

  • 动态大小ArrayList 的大小可以根据需要动态调整,不需要手动管理数组的大小。
  • 易于使用:提供了许多方便的方法,如 add(), remove(), contains(), get() 等,使得操作更为简单。
  • 自动扩展:当元素超过当前容量时,ArrayList 会自动扩展其内部数组的大小。

我们可以实现一些关于ArrayList类中的方法

注:

public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }

 这些代码的作用:在一个自定义数组实现中,使用这样的常量可以在初始化时指定数组的默认容量。

1.新增元素,默认在数组最后新增

在实现add()方法时,我们需要检验这个数组的大小,如果数组容量满了,我们需要对数组进行扩容。

public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
public boolean arrayIsFull(){
        return this.size == array.length;
    }
    private void expand(){
       this.array= Arrays.copyOf(this.array,2*array.length);
    }
public void add(int data) {
        if(arrayIsFull()){
            expand();
        }
        this.array[this.size]=data;
        this.size++;
    }
}

2.在 pos 位置新增元素

首先我们新建一个类,手动写一个异常,如果定位不合法时,抛出这个异常。然后在指定位置增加元素时,我们需要判断指定的位置是否合法,是否满足条件,如果不满足,则会抛出这个定位不合法异常,再进行判断,判断这个数组是否满了,如果容量满了,则进行扩容,最后用catch对异常进行处理。

public class PosIllegal extends RuntimeException {
    public PosIllegal(){

    };
    public PosIllegal(String mas){
        super(mas);
    };
}
public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
public boolean arrayIsFull(){
        return this.size == array.length;
    }
private void expand(){
       this.array= Arrays.copyOf(this.array,2*array.length);
    }

    public void checkPos(int pos) throws PosIllegal{
        if(pos<0  ||  pos>size){
            throw new PosIllegal("pos位置不合法");
        }
    }

public void add(int pos, int data) {
        try {
            checkPos(pos);
            if (arrayIsFull()){
                expand();
            }
            for (int i = size-1; i >=pos; i--) {
                this.array[i+1]=this.array[i];
            }
            array[pos]=data;

        }catch (PosIllegal e){
            System.out.println("pos位置不合法");
            e.printStackTrace();
        }

    }

3.判定是否包含某个元素

public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
public boolean contains(int toFind) {
        for (int i = 0; i < array.length; i++) {
            if(array[i]==toFind) {
                return true;
            }
        }
        return false;
    }
}

4.查找某个元素对应的位置

public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
public int indexOf(int toFind) {
        for (int i = 0; i < array.length; i++) {
            if(array[i]==array[toFind]) {
                return array[i];
            }
        }
        return 0;
    }
}

5. 获取 pos 位置的元素

 首先我们手写两个异常,一个是判断是否数组为空,另一个判断pos的位置是否合法,然后处理异常,最后将pos位置的元素返回。

public class PosIllegal extends RuntimeException {
    public PosIllegal(){

    };
    public PosIllegal(String mas){
        super(mas);
    };
}
public class NullException extends RuntimeException{
    public NullException() {
    }
    public NullException(String mas) {
        super(mas);
    }
}
public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }

public void checkPos(int pos) throws PosIllegal{
        if(pos<0  ||  pos>size){
            throw new PosIllegal("pos位置不合法");
        }
    }

private void checkNull()throws NullException{
        throw new NullException("顺序表为空");
    }

    public void checkEmpty(){
        if (size==0){
            checkNull();
        }
    }
public int get(int pos) {
        try {
            checkEmpty();
            checkPos(pos);
            return array[pos];
        }catch (PosIllegal e){
            e.printStackTrace();

        }catch (NullException e){
            e.printStackTrace();
        }
        return -1;
    }
}

6.给 pos 位置的元素设为 value

首先我们手写两个异常,一个是数组为空时抛出,另一个判断pos的位置是否合法,然后处理异常,最后将pos位置的元素设置为value。

public class PosIllegal extends RuntimeException {
    public PosIllegal(){

    };
    public PosIllegal(String mas){
        super(mas);
    };
}
public class NullException extends RuntimeException{
    public NullException() {
    }
    public NullException(String mas) {
        super(mas);
    }
}
public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }

public void checkPos(int pos) throws PosIllegal{
        if(pos<0  ||  pos>size){
            throw new PosIllegal("pos位置不合法");
        }
    }

private void checkNull()throws NullException{
        throw new NullException("顺序表为空");
    }

    public void checkEmpty(){
        if (size==0){
            checkNull();
        }
    }
public void set(int pos, int value) {
        try {
            checkEmpty();
            checkPos(pos);
            array[pos]=value;
        }catch (PosIllegal e){
            e.printStackTrace();

        }catch (NullException e){
            e.printStackTrace();
        }
    }

7.删除第一次出现的关键字key

首先手写一个异常,数组为空时抛出,然后将index的返回值赋给pos,如果pos不为-1时,将pos+1位置的值赋给pos位置,然后将size的大小-1。

indexOf(toRemove) 是一个方法调用,用于查找 toRemove 在数组中的索引。它会遍历数组,如果找到 toRemove,就返回其索引。如果没有找到,则返回 -1。在你的 remove 方法中,它用于确定要删除的元素的位置。

public class NullException extends RuntimeException{
    public NullException() {
    }
    public NullException(String mas) {
        super(mas);
    }
}
public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
private void checkNull()throws NullException{
        throw new NullException("顺序表为空");
    }

    public void checkEmpty(){
        if (size==0){
            checkNull();
        }
    }
public void remove(int toRemove) {
        try {
            checkEmpty();
            int pos=indexOf(toRemove);
            if(pos==-1){
                return;
            }
            for (int i =pos; i <size-1 ; i++) {
                array[i]=array[i+1];
            }
            array[size-1]=0;
            size--;
        }catch (NullException e){
            e.printStackTrace();
        }
    }

8.清空顺序表

public class MyArrayList implements IList{

    public int size;
    public int[] array;

    public static final int DEFAULT_CAPACITY = 10;

    public MyArrayList() {
        this.array = new int[DEFAULT_CAPACITY];
    }
public void clear() {
        size=0;
        //如果将数组元素设置为默认值
        /*for (int i = 0; i < size - 1; i++) {
            array[i]=0;
        }*/
    }
}

希望能对大家有所帮助!!!!!

 

 

 

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

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

相关文章

falcon调研的CSIG

CSIG (Congestion Signaling&#xff09; C是Congestion, SIG是 Signaling的简写&#xff0c;的机制&#xff1a; 本质是带内遥测 沿着L2一路可以实现更新,原文&#xff1a;This summarizedinformation is collected over L2 CSIG-tags in a compare-and-replace manner acro…

谢希仁计算机网络 (四)—— 网络层

计算机网络&#xff08;四&#xff09;—— 网络层&#xff08;1、2&#xff09;&#xff1a;网络层概述、网络层提供的两种服务 计算机网络&#xff08;四&#xff09;—— 网络层&#xff08;1、2&#xff09;&#xff1a;网络层概述、网络层提供的两种服务_以下属于网络层范…

基于PHP+uniapp的民宿预订系统的微信小程序设计与实现 ea9i3

目录 项目介绍技术栈和环境说明具体实现截图php技术介绍文件解析微信开发者工具HBuilderXuniapp开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 项目介绍 总体上看&#xff0c;Android的民宿预订系统…

企业安全运行与维护(Enterprise Security Operation and Maintenance)

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

.locked勒索病毒:数据安全的新威胁

导言 在数字时代&#xff0c;数据已成为企业和个人的核心资产&#xff0c;其价值无可估量。然而&#xff0c;随着网络技术的飞速发展&#xff0c;一种名为“.locked勒索病毒”的恶意软件悄然兴起&#xff0c;对全球范围内的数据安全构成了严重威胁。这种病毒以其独特的加密方式…

【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分

收录于我的专栏&#xff1a;AI修炼之路 第1部分&#xff1a;【RAG论文精读3】RAG论文综述1&#xff08;2312.10997&#xff09;-第1部分 二、RAG概览 RAG研究范式不断演变&#xff0c;可以为三个阶段&#xff1a;原始RAG、进阶RAG和模块化RAG。 2.1 原始RAG Naive RAG&#xf…

Spring Boot快速入门:HelloWorld示例

Spring Boot是一个非常流行&#xff0c;受欢迎的框架&#xff0c;它不仅常用于构建传统的单体式MVC应用程序&#xff0c;同时也非常适合用于搭建微服务架构。对于 Web 应用程序&#xff0c;Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现…

QD1-P1 HTML、CSS与JS三者之间的关系

今天开始学习前端基础&#xff0c;新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程&#xff1a;【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up&#xff1a;遥遥温柔乡 在B站随便搜索了一个前端课程&#xff0c;共91节&am…

美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解

在运用畅联云平台进行视频汇聚与监控管理时&#xff0c;海康威视的安防摄像机凭借其卓越的性能与广泛的应用兼容性&#xff0c;成为了众多用户的首选产品。海康威视摄像机参数设置与调试对于实现高效的安防监控至关重要。今天&#xff0c;让我们一同深入学习海康摄像机的参数设…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

【万字长文】Word2Vec计算详解(三)

【万字长文】Word2Vec计算详解&#xff08;三&#xff09; 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解&#xff08;一&#xff09;markdown行 9000 【万字长文】Word2Vec计算详解&#xff08;二&#xff09;markdown行 12000 【万字长文…

数据结构与算法篇(刷题篇 - 树)

目录 1. 二叉树的前序遍历&#xff08;简单&#xff09; 1.1. 题目描述 1.2. 解题思路 方法一&#xff1a;递归&#xff08;推荐使用&#xff09; 方法二&#xff1a;非递归&#xff08;扩展思路&#xff09; 2. 二叉树的中序遍历&#xff08;中等&#xff09; 2.1. 题目…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中&#xff0c;突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢&#xff0c;因为在我使用DeepFilter的过程中&#xff0c;我发现对于一些低信噪比的信号来说&#xff0c;DeepFilter很容易出现过拟合现象&#xff0c;导致音源…

大数据毕业设计选题推荐-电影票房数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Linux云计算 |【第四阶段】RDBMS2-DAY1

主要内容&#xff1a; MySQL主从同步&#xff08;概述、原理、构建主从同步&#xff09;、主从同步结构类型&#xff08;主多从、主从从、主主&#xff09;、复制模式&#xff08;异步、半同步&#xff09;、启用半同步复制 一、MySQL主从同步 MySQL 主从同步&#xff08;Mas…

工控风云 | 科东软件受邀参加2024 CCF工控“风云论坛”并做演讲

近日&#xff0c;CCF工业控制计算机专委会首届“风云论坛”在苏州CCF业务总部&学术交流中心成功召开。作为国内工业操作系统领军企业&#xff0c;科东软件受邀参加本次大会&#xff0c;并做“鸿道(Intewell)新型工业操作系统”主题演讲。 “要打好科技仪器设备、操作系统…

自动驾驶系列—超声波雷达技术详解:自动驾驶中的短距离感知利器

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

知识改变命运 数据结构【优先级队列(堆)】

优先级队列(堆&#xff09; 1&#xff1a;堆概念2&#xff1a;堆的创建(以小根堆为例)3&#xff1a;堆的插入与删除3.1 堆的插入3.2堆的删除 4&#xff1a;oj练习5&#xff1a;堆排序6接口介绍&#xff08;底层代码的查看&#xff09;6.1常用三种构造方法 前言&#xff1a;队列…

Flutter-->Namespace not specified.

更新Android gradle 7.5.0之后, 运行项目会出现Namespace not specified.问题, 这里出一个我的解决方案. 由于很多库都不可能及时更新适配gradle 7.5.0, 所以可以等pub get将子库拉取到本地之后, 在本地手动添加namespace属性,即可解决本文问题. 作为程序猿,那肯定不可能手动修…

Elasticsearch、Kibana学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…