栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

考研失利,转行Java,小伙伴问我数组应该怎么学

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

考研失利,转行Java,小伙伴问我数组应该怎么学

目录
    • 数组
      • ❤ java中的数组是什么
      • ❤ java中数组声明的语法
      • ❤ 数组赋值
      • ❤ 数组中查询数据
      • ❤ 数组的长度
      • ❤ 数组的局限性
    • 自己动手封装一个可伸缩的数组
      • ❤ 为什么要自己封装
      • ❤ 为什么不用ArrayList
      • ❤ 开始写代码
        •  一些思考
      • ❤ 基础准备
        •  增加元素
          •  插入元素的过程
          •  代码实现
        •  删除元素
          •  删除元素的过程
          •  代码实现
    • 两个思考题
      •  通过泛型改写类?
      •  java中数组下标为什么从0开始?

数组 ❤ java中的数组是什么

java中关于数组的定义是,存放同一数据类型的一个在内存中连续的数据结构,这个同一类型可以是Java中的八个基本类型,也可以是引用类型(其中包括我们自定义的类型,比如Teacher,Student) 数组的下标是从0开始的,换句话说,如果你的数组中存放了n个元素,那数组中最后一个元素的下标就是 n-1.

❤ java中数组声明的语法

通过上面的学习我们已经知道了,数组是存放同一数据类型的在内存中连续的一种数据结构
那么在Java中如何声明一个数组呢? 它的语法如下
数据类型 [] 数组名称
比如,声明一个 int 类型的数组,我们给它起名字为arr,那么我们可以这样来写:

//声明一个int类型的数组arr
int [] arr;
//声明一个String类型的数组str
String [] str;
//声明一个自定义类型的Student数组
Student [] students;
❤ 数组赋值

数组赋值,等号左边是声明,等号右边为赋值,一般用大括号来包裹数组中的元素。
我们来看几个例子:

 //声明一个int类型的数组 arr
 int[] arr = {1, 2, 3, 4, 5};
 //声明一个int 类型的数组 arr1
 int[] arr1 = new int[]{1, 23, 45};
 // 声明一个String 类型的数组
 String[] str = {"abc", "cde", "xyz"};
 // 声明一个自定义Student类型的数组
 Student[] students = {new Student("zhangsan", 13), new Student("lisi", 20)};
❤ 数组中查询数据

语法 数组名[数组下标]
我们知道数组中在内存中是连续的内存单元,那么我们就可以通过数组的索引直接查找对应的元素。比如

// 声明一个有5个元素的int类型数组
int [] arr = {1,2,3,4,5};

好了,我们上面说到,数组的下标从零开始,上面数组一共有五个元素,下标分别为0,1,2,3,4,我们如果想取得数组中第三个元素的话,我们可以这样来写

//取得数组第三个元素
int i = arr[2];
❤ 数组的长度

语法数组名.length
以上面的数组arr为例子,它的长度是5,那么我们就可以通过arr.length来直接取得它的值比如

int [] arr = {1,2,3,4,5};
System.out.println(arr.length) // 5
❤ 数组的局限性

java中的数组在内存中是一段连续的内存单元,它要求在声明或者赋值时显示或隐式指定数组的长度,即大小,并且指定以后,会有如下局限性

  • 数组的长度不能变化,即不能对数组中的元素个数进行增加或者减少
自己动手封装一个可伸缩的数组 ❤ 为什么要自己封装

上面我们提到了java中数组的局限性,我们不能对数组个数进行增加,删除。

❤ 为什么不用ArrayList

假设我们没学过ArrayList,作为初学者,我们只了解简单的数组,循环等知识

❤ 开始写代码  一些思考

编写自定义可伸缩的数组,我们要注意哪些点呢?

  • 防止数组下标越界
  • 灵活实现增加,删除元素
❤ 基础准备

首先我们要准备一个自定义类 MyArray

package com.nightcat.bean;

import java.util.Arrays;

public class MyArray {
    //封装的数组
    private int[] data;
    //数组中实际有多少元素
    private int size;

    
    public MyArray() {
        this(10);
    }

    
    public MyArray(int capacity) {
        data = new int[capacity];
        size = 0;
    }

    
    public int getSize() {
        return size;
    }

    
    public int getCapacity() {
        return data.length;
    }

    
    public boolean isEmpty() {
        return size == 0;
    }

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

我们定义了一个类,它的成员变量有capacity和size,其中capacity表示的是数组的容量,size表示的是数组中第一个没有元素的位置,举例来说,如果数组中有3个元素,那么size就应该指向数组下标为3的位置。(数组下标从零开始)

 增加元素  插入元素的过程

向我们自定义数组中添加元素的操作,就是挪动元素的一个过程,具体如下

  • 判断数组下标是否越界
  • 将待插入位置(含)后边的所有元素向后移动一个位置
  • 将待插入元素插入指定位置
  • 维护size
 代码实现
   
    public void addFirst(int e) {
        add(0, e);
    }


    
    public void addLast(int e) {
        add(size, e);
    }

    
    public void add(int index, int e) {
        if (size == data.length) {
            throw new RuntimeException("数组已经满了");
        }
        if (index < 0 || index > size) {
            throw new RuntimeException("数组下标越界异常");
        }
        for (int i = size; i > index; i--) {
            data[i] = data[i - 1];
        }
        data[index] = e;
        size++;
    }
 删除元素  删除元素的过程
  • 判断数组下标是否越界
  • 将待删除位置(含)后边的所有元素向前移动一个位置
  • 维护size
 代码实现
    public void del(int index) {
        if (size == 0) {
            throw new RuntimeException("数组里没有元素了");
        }
        if (index < 0 || index > size) {
            throw new RuntimeException("数组下标越界异常");
        }
        for (int i = index; i < size; i++) {
            data[i] = data[i + 1];
        }
        size--;
    }
两个思考题  通过泛型改写类?  java中数组下标为什么从0开始?
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/849857.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号