广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java 数据结构与算法系列精讲之数组
  • 304
分享到

Java 数据结构与算法系列精讲之数组

2024-04-02 19:04:59 304人浏览 八月长安

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

摘要

目录概述数组声明数组的两个方法创建数组的两个方法索引自定义数组泛型构造函数元素操作调用完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.

概述

从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.

数组

数组 (Array) 是有序数据的集合, 在 Java 中 java.util.Arrays包含用来操作数组的各种方法, 比如排序和搜索等. 其所有方法均为静态方法, 调用起来非常简单.

声明数组的两个方法

方法一:

数据类型[] array;

方法二:

数据类型 array[];

创建数组的两个方法

方法一:

数据类型[] array = new 数据类型[n];

int[] array = new int[10];

方法二:

数据类型[] arrray = {value1, value2, ...}

int[] array = new int[10];

索引

索引 (Index) 可以帮助我们定位到想要的数据, 大幅提高数据的检索速度.

自定义数组

泛型

<E>示一种指定的数据类型, 叫做泛型. E, 取自 Element (元素) 的首字母. 在出现 E 的地方, 我们使用一种引用数据类型将其替换即可, 表示我们将存储哪种引用类型的元素.

构造函数


// 有参构造
public Array(int capacity){
    data =  (E[]) new Object[capacity];
    size = 0;
}

// 无参构造
public Array(){
    this(10);
}

元素操作


// 头部添加元素
public void addFirst(E element){
   // 如果超过数组最大容量, 扔出异常
   if(size == data.length){
        throw new RuntimeException("array is full!");
    }

    // 列表所有index及元素后移
    for (int i = size - 1; i >= 0; i--) {
        data[i + 1] = data[i];
    }

    // 数组第size个赋值为element
    data[0] = element;

    // 数组大小+1
    size++
}

// 尾部添加元素
public void addLast(E element){
    // 如果超过数组最大容量, 扔出异常
    if(size == data.length){
        throw new RuntimeException("array is full!");
    }

    // 数组第size个赋值为element
    data[size] = element;

    // 数组大小+1
    size++;
}

// 通过索引添加元素
public void add(int index, E element){

    // 如果超过数组最大容量, 扔出异常
    if(size == data.length){
        throw new RuntimeException("reached max capacity");
    }

    if(index < 0 || index > size){
        throw new RuntimeException("invalid index");
    }

    // 列表所有index及以后的元素后移
    for (int i = size-1; i >=index; i--) {
        data[i + 1] = data[i];
    }
    data[index] = element;
    size++;
}

调用


public static void main(String[] args) {

    // 创建数组
    Array array = new Array(10);

    // 尾部添加
    array.addLast(2);
    array.addLast(3);
    array.addLast(4);
    System.out.println(array.toString());

    // 头部添加
    array.addFirst(1);
    array.addFirst(0);
    System.out.println(array.toString());

    // 通过index添加元素
    array.add(0, -1);
    array.add(6, 5);
    System.out.println(array.toString());
}

输出结果:

Array{data=[2, 3, 4, null, null, null, null, null, null, null]}
Array{data=[0, 1, 2, 3, 4, null, null, null, null, null]}
Array{data=[-1, 0, 1, 2, 3, 4, 5, null, null, null]}

完整代码


import java.util.Arrays;

public class Array<E> {
    private E[] data;  // 存放数据
    private int size;  // 存放数组元素个数

    // 有参构造
    public Array(int capacity){
        data = (E[]) new Object[capacity];
        size = 0;
    }

    // 无参构造
    public Array(){
        this(10);
    }

    // 获取数组容量
    public int getCapacity(){
        return data.length;
    }

    // 获取数组元素个数
    public int getSize(){
        return size;
    }

    // 判断数组是否为空
    public boolean isEmpty(){
        return size == 0;
    }

    // 头部添加元素
    public void addFirst(E element){
        // 如果超过数组最大容量, 扔出异常
        if(size == data.length){
            throw new RuntimeException("array is full!");
        }

        // 列表所有index及元素后移
        for (int i = size - 1; i >= 0; i--) {
            data[i + 1] = data[i];
        }

        // 数组第size个赋值为element
        data[0] = element;

        // 数组大小+1
        size++;
    }

    // 尾部添加元素
    public void addLast(E element){
        // 如果超过数组最大容量, 扔出异常
        if(size == data.length){
            throw new RuntimeException("array is full!");
        }


        // 数组第size个赋值为element
        data[size] = element;

        // 数组大小+1
        size++;
    }
    
    // 通过索引添加元素
    public void add(int index, E element){

        // 如果超过数组最大容量, 扔出异常
        if(size == data.length){
            throw new RuntimeException("reached max capacity");
        }

        if(index < 0 || index > size){
            throw new RuntimeException("invalid index");
        }

        // 列表所有index及以后的元素后移
        for (int i = size-1; i >=index; i--) {
            data[i + 1] = data[i];
        }
        data[index] = element;
        size++;
    }

    @Override
    public String toString() {
        return "Array{" +
                "data=" + Arrays.toString(data) +
                '}';
    }

    public static void main(String[] args) {

        // 创建数组
        Array array = new Array(10);

        // 尾部添加
        array.addLast(2);
        array.addLast(3);
        array.addLast(4);
        System.out.println(array.toString());

        // 头部添加
        array.addFirst(1);
        array.addFirst(0);
        System.out.println(array.toString());

        // 通过index添加元素
        array.add(0, -1);
        array.add(6, 5);
        System.out.println(array.toString());
    }
}

到此这篇关于Java 数据结构与算法系列精讲之数组的文章就介绍到这了,更多相关Java 数组内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java 数据结构与算法系列精讲之数组

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

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

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

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

下载Word文档
猜你喜欢
  • Java 数据结构与算法系列精讲之数组
    目录概述数组声明数组的两个方法创建数组的两个方法索引自定义数组泛型构造函数元素操作调用完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. ...
    99+
    2022-11-13
  • Java 数据结构与算法系列精讲之队列
    目录概述队列队列实现enqueue 方法dequeue 方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. 队列 队列 (Q...
    99+
    2022-11-13
  • Java 数据结构与算法系列精讲之栈
    目录概述栈栈实现push方法pop方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章. 栈 栈 (Stack) 是一种运算受限...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之KMP算法
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. KMP 算法 KMP (Knuth-Morris-Pratt), 是一种改进的字符串匹配算法...
    99+
    2022-11-13
  • Java 数据结构与算法系列精讲之贪心算法
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 贪心算法 贪心算法 (Greedy Algorithm) 指的是在每一步选择中都采取在当前状...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之排序算法
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 冒泡排序 冒泡排序 (Bubble Sort) 是一种简单的排序算法. 它重复地遍历要排序的...
    99+
    2022-11-13
  • Java 数据结构与算法系列精讲之汉诺塔
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 汉诺塔 汉诺塔 (Tower of Hanoi) 是一个源于印度的古老益智玩具. 汉诺塔由三...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之二叉堆
    目录概述优先队列二叉堆二叉堆实现获取索引添加元素siftUp完整代码概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 优先队列 优先队列 (P...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之红黑树
    目录概述红黑树红黑树的实现Node 类添加元素左旋右旋完整代码概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 红黑树 红黑树 (Red Bl...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之环形链表
    目录概述链表环形链表环形链表实现Node 类insert 方法remove 方法main完整代码概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章....
    99+
    2022-11-13
  • Java 数据结构与算法系列精讲之单向链表
    目录概述链表单向链表单向链表实现Node 类add 方法remove 方法get 方法set 方法contain 方法main完整代码概述 从今天开始, 小白我将带大家开启 Jave...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之背包问题
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 动态规划 动态规划 (Dynamic Programming) 的核心思想是把大问题划分为小...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之哈希算法实现
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 获取哈希值 hashCode()方法可以返回一个对象的哈希值. 需要注意的是, 我们需要对值...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之字符串暴力匹配
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 字符串匹配 字符串匹配 (String Matching) 指的是判断一个字符串是否包含另一...
    99+
    2022-11-13
  • Java数据结构与算法系列精讲之时间复杂度与空间复杂度
    目录概述算法的衡量标准时间复杂度最优时间复杂度平均时间复杂度最坏时间复杂度O(1)O(n)O(n^2)O(logN)空间复杂度O(1)O(n)概述 从今天开始, 小白我将带大家开启 ...
    99+
    2022-11-13
  • Java超详细精讲数据结构之bfs与双端队列
    目录一.bfs二.双端队列三.算法题1.kotori和迷宫2.小红找红点3.小红玩数组一.bfs bfs(广度优先搜索),类似二叉树的层序遍历,利用队列完成。一般用于求最短路。 图的...
    99+
    2022-11-13
  • Java数据结构与算法之稀疏数组与队列深入理解
    目录一、数据结构和算法简介二、稀疏数组稀疏数组的应用实例二维数组与稀疏数组的转换二维数组 转 稀疏数组的思路稀疏数组 转 原始的二维数组的思路三、队列数组模拟队列代码优化:数组模拟环...
    99+
    2022-11-12
  • 剑指Offer之Java算法习题精讲数组与字符和等差数列
    题目一  解法 class Solution { public int[] relativeSortArray(int[] arr1, int[] arr2) { ...
    99+
    2022-11-13
  • Java数据结构与算法实例讲解
    这篇文章主要讲解了“Java数据结构与算法实例讲解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java数据结构与算法实例讲解”吧! 为什么需要树这种结构数组存储方式分析:优点:通...
    99+
    2023-06-15
  • Java数据结构与算法之循环队列的实现
    目录概述循环队列循环队列实现改变队列大小enqueue 方法dequeue 方法main完整代码 概述 从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作