广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java实现动态数组
  • 178
分享到

java实现动态数组

java动态数组 2022-11-12 10:11:02 178人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本文实例为大家分享了java实现动态数组的具体代码,供大家参考,具体内容如下 数组最大的优点︰快速查询。scores[2]。数组最好应用于“索引有语意”的情况,但是如果索引比较长就

本文实例为大家分享了java实现动态数组的具体代码,供大家参考,具体内容如下

数组最大的优点︰快速查询。scores[2]。数组最好应用于“索引有语意”的情况,但是如果索引比较长就还是不要用数组了,比如身份证号,太长了。

Java提供给我们的数组是静态数组,大小在一开始就定下来了,所以我们要创建一个动态数组,来满足我们的需求。其实原理挺简单,初次创建的时候赋予一个初始大小,当容量不够用时进行扩容,下列代码最关键的是resize方法


public class Array<E> {
    private E[] data;
    private Integer size;
 
    
    public Array(Integer capacity) {
        // 在java里不能直接创建一个泛型数组,只能这样转换
        data = (E[]) new Object[capacity];
        size = 0;
    }
 
    public Array() {
        this(20);// 默认容量为20
    }
 
    
    public E get(Integer key) throws Exception {
        if (key >= data.length || key < 0 || key >= size)
            throw new Exception("该索引非法");
        return data[key];
    }
    
    
    public void insert(Integer key, E value) throws Exception {
        this.resize(true);// 要在key检查之前执行
        this.checkKey(key, false);
        // 后移一位
        for (Integer i = size - 1; i >= key; i--)
            data[i + 1] = data[i];
        data[key] = value;
        size++;
    }
 
    
    public void delete(Integer key) throws Exception {
        checkKey(key, true);
        for (Integer i = key; i < size - 1; i++)
            data[i] = data[i + 1];
        // 实际上是通过覆盖的方式删除掉key索引的值,但是最后还需要删除掉size-1索引的值
        data[size - 1] = null;
        size--;
        this.resize(false);
    }
 
    
    private void checkKey(Integer key, Boolean equal) throws Exception {
        if (equal) {
            if (key >= data.length || key < 0 || key >= size)
                throw new Exception("该索引非法");
        } else {
            if (key >= data.length || key < 0 || key > size)
                throw new Exception("该索引非法");
        }
    }
 
    
    private void resize(Boolean isExpand) {
        if (size == data.length && isExpand) {
            //如果数组已经满了,那么就扩容为当前容量的1.5倍
            E[] buffer = (E[]) new Object[size + (size / 2)];
            for (Integer i = 0; i < size; i++)
                buffer[i] = data[i];
            data = buffer;
        } else if (size < data.length / 4 && (!isExpand) && data.length / 2 != 0) {
            //如果数组的size小于容量的四分之一,则容量降低一半
            E[] buffer = (E[]) new Object[data.length / 2];
            for (Integer i = 0; i < size; i++)
                buffer[i] = data[i];
            data = buffer;
        }
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: java实现动态数组

本文链接: https://www.lsjlt.com/news/132318.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java实现动态数组
    本文实例为大家分享了java实现动态数组的具体代码,供大家参考,具体内容如下 数组最大的优点︰快速查询。scores[2]。数组最好应用于“索引有语意”的情况,但是如果索引比较长就...
    99+
    2022-11-12
    java 动态数组
  • java如何实现动态数组
    这篇文章主要介绍了java如何实现动态数组,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下数组最大的优点︰快速查询。scores[2]。数组最好应用于“索引有语意”...
    99+
    2023-06-20
  • Java 动态数组的实现示例
    目录静态数组动态数组的实现原理1.添加元素2.删除元素3.数组扩容4.数组缩减静态数组 Java中最基本的数组大家肯定不会陌生: int[] array = new int[6]...
    99+
    2022-11-12
    Java 动态数组
  • JAVA怎么实现PHP的动态数组
    本文操作环境:windows7系统、PHP7.1版、DELL G3电脑JAVA怎么实现PHP的动态数组?java实现php的数组:和java的Map类似用数字获取值:HashMap<Integer, Object> map = ...
    99+
    2018-07-18
    JAVA PHP
  • java实现数组的动态初始化
    一、什么是数组的初始化就是为数组开辟连续的内存空间,并为每个数组元素赋予值。二、如何对数组进行初始化1、动态初始化 只指定长度,由系统给出初始化值int[] arr = new int[5];推荐相关视频教程:java视频教程2、静态初始化...
    99+
    2019-02-20
    java 实现 数组 动态初始化
  • java中动态数组的具体实现
    声明:data为数组名。size为数组中最后一个元素的下一个位置。实现动态数组的原因:因为java中的数组是静态的,在new数组时就需要指定数组的大小,如果需要存储的元素为未知的个数,设置空间过大会造成浪费,设置空间过小会无法存入全部数据,...
    99+
    2019-01-23
    java教程 java 动态数组 实现
  • Java数组怎么实现动态初始化
    这篇文章主要讲解了“Java数组怎么实现动态初始化”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数组怎么实现动态初始化”吧!概念1、数组动态初始化只给定数组长度,系统默认初始化值。2...
    99+
    2023-06-30
  • java数组长度如何实现动态调整
    在Java中,数组的长度是固定的,一旦定义了数组的长度,就无法再进行动态调整。如果需要动态调整数组的长度,可以使用Java集合类中的...
    99+
    2023-10-26
    java
  • Java数组实现动态初始化的实例详解
    概念 1、数组动态初始化只给定数组长度,系统默认初始化值。 2、格式 数据类型[] 数组名 = new 数据类型[数组长度]; int[] arr = new int[3];...
    99+
    2022-11-12
    Java数组 动态初始化
  • C++怎么实现动态数组
    本篇内容介绍了“C++怎么实现动态数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动态数组动态数组Vector可以动态扩展内存,其采用连续...
    99+
    2023-07-02
  • 探秘ArrayList源码:Java动态数组的背后实现
    探秘ArrayList源码:Java动态数组的背后实现 一、成员变量二、构造器1、默认构造器2、带初始容量参数构造器3、指定collection元素参数构造器 三、add()方法扩容机制四、场景分析1、对于ensureExpli...
    99+
    2023-08-16
    java 开发语言 算法 数据结构
  • C#中怎么实现动态数组
    C#中怎么实现动态数组,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayL...
    99+
    2023-06-17
  • Java和C语言如何使用静态语言实现动态数组
    这篇文章将为大家详细讲解有关Java和C语言如何使用静态语言实现动态数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JAVA版JAVA自带了一个集合类ArrayList,可以实现动态数组的功能,相比原生...
    99+
    2023-05-31
    java c语言
  • java如何创建动态数组
    在Java中,可以使用ArrayList类来创建动态数组。 要创建一个动态数组,可以按照以下步骤进行操作: 导入ArrayList...
    99+
    2023-10-26
    java
  • Java ArrayList集合详解(Java动态数组)
    目录一、ArrayList集合的概述和基本使用1.概述2.基本使用二、ArrayList集合的详细介绍1.定义一个ArrayList集合2.ArrayList集合常用的方法3.将"类...
    99+
    2022-11-12
    Java ArrayList集合 Java动态数组 ArrayList集合
  • vb.net如何实现动态控件数组
    这篇文章主要介绍vb.net如何实现动态控件数组,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!VB.NET控件数组问题1、在form的头部定义一个公共的ArrayList类型的变量Dim m_items As New...
    99+
    2023-06-17
  • C++详解如何实现动态数组
    目录动态数组示例代码运行环境运行效果动态数组 动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,将原有的数组元素...
    99+
    2022-11-13
    C++ 动态数组 C++ 数组
  • Java 自定义动态数组方式
    Java自定义动态数组 1、静态数组向动态数组转变 (1)静态数组,数组空间固定长度 这个数组空间总长为4,如果此时新插入一个数据就会报数组空间不足 (2)静态数组如何转变成动态数...
    99+
    2022-11-11
    Java 自定义 动态数组
  • C#动态创建数组的实现过程
    本篇内容主要讲解“C#动态创建数组的实现过程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#动态创建数组的实现过程”吧!C#动态创建数组在实际开发中是十分实用的功能实现,那么C#动态创建数组是...
    99+
    2023-06-17
  • C#中怎么实现一个动态数组
    C#中怎么实现一个动态数组,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。数组的容量是固定的,但ArrayList的容量可以根据需要自动扩充。当我们修改了ArrayList的...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作