专栏首页wfaceboss使用java数组,并开始封装我们自己的数组

使用java数组,并开始封装我们自己的数组

今天感冒了,全身酸软无力,啥样不想做,就来学习吧,此节我们从初步使用java中提供的数组,然后分析相关情况,过渡到封装我们自己的数组。

一.我们先来感受一下java提供的数组,以整型数组(int[])为例,相关代码如下:

public class Main {

    public static void main(String[] args) {

        int[] arr = new int[10];
        for(int i = 0 ; i < arr.length ; i ++)
            arr[i] = i;

        int[] scores = new int[]{100, 99, 66};
        for(int i = 0 ; i < scores.length ; i ++)
            System.out.println(scores[i]);

        for(int score: scores)
            System.out.println(score);

        scores[0] = 96;

        for(int i = 0 ; i < scores.length ; i ++)
            System.out.println(scores[i]);
    }
}

1.对于数组最大优点:快速查询。例如我想知道scores下标为1数值是多少,我们只需

scroes[1]

即可快速访问到该下标对应的值。

2.数组最好应用于"索引有语义"的情况,换句话说我们得知道在查什么,比如查询学号为1的学生成绩,这种情况。如果没有语义最好是用其他的数据结构。可以以后做一个比较。

3.有的场景下:即使索引有语义,但是不适合用数组。 比如:使用11位手机号码(开辟空间是否过大,是否有空间浪费。)

但是如果我们需要在索引没有语义的情况下,也可以使用数组,这时该怎么使用数组?该怎么表示数组没有元素?该怎么添加元素?该怎么删除元素?

Java原本的数组属于静态数组,要解决以上问题,要基于Java数组二次封装属于我们的数组(动态数组)。最后做简单的复杂度分析,看看性能。

二.制作属于我们自己的数组类

此部分我们主要是为了解决上述的疑问,我们需要基于Java数组二次封装属于我们的数组(动态数组)。

操作:新建一个Array类,定义私有的data数组(此处我们从封装int类型数组为例)

/**
 * 1.从封装int类型数组开始
 */
public class Array {
    //使用private 的目的是防止用户从外界修改,造成数据不一致
    private int[] data;
    private int size;

    //构造函数,传入数组的容量capacity构造Array函数
    public Array(int capacity) {
        data = new int[capacity];
        size = 0;
    }

    //无参构造函数,默认数组的容量capacity=10
    public Array() {
        this(10);
    }

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

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

    //获取数据是否w为空
    public boolean iEmpty() {
        return size == 0;
    }
}

此处我们只是简单对数组新增几个普通方法,算是简单的入门过渡一下吧,呵呵~

对数据结构来说,本质和数据库是一样的,也是存储数据,之后再对这些数据进行高效的操作。只不过涉及的数据结构会把数据存储在内存中,所以在大的类别的划分,也是增删改查。针对不同的数据结构,对增删改查的方式是截然不同的。甚至有的数据结构会忽略其中的某个动作。但是不管怎样,增删改查四个动作可以作为我们研究一个数据结构相应的脉络。由于数组本身是静态的,创建时就必须指定大小(容量capacity)。数组有多少元素(size)。

下一节我们将针对数组新增增删改查等方法,便于我们使用数组~

仅供学习记录,别无它用。。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • nop前端分页实现思路及步骤

    第一步,针对Model操作,在需要使用分页的界面Model中将分页类作为该Model类的成员,并在Modle的构造函数中实例化。代码如下:

    wfaceboss
  • (9/24) 图片跳坑大战--css分离与图片路径处理

    在上一节当中,我们把小图片打包成Base64格式(打包到了js当中)。我们也算是对webpack对图片的打包有个基本了解。

    wfaceboss
  • 数据交互

    页面上的所有事件都是通过js来调用的。那么就必须是 js里面写事件,然后把前台的数据,传到Controller里面,然后利用Controller来处理业务。

    wfaceboss
  • Java复制数组的四种方法

    Java 中实现数组复制有 4 种方法,分别为使用 Arrays 类的 copyOf() 方法和 copyOfRange() 方法、System 类的 arra...

    用户7886150
  • Java常用设计模式--观察者模式(Observer Pattern)

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。

    gang_luo
  • 从此篇文章入手,轻轻松松学算法

    在计算机科学中,分治策略是非常重要的算法思想, 字面上的意思就是把一个复杂问题分解成2个或者多个相同或者相似的子问题,再将子问题分解成更小的子问题;直到最后的子...

    CC老师
  • 【封装那些事】 未利用封装

    客户代码使用显式类型检查(使用一系列if-else或switch语句检查对象的类型),而不利用出层次结构内已封装的类型变化时,将导致这种坏味。

    撸码那些事
  • 【封装那些事】 未利用封装

    撸码那些事
  • leetcode327. Count of Range Sum

    这道题目是指,现有一个整数数组,并输入上界值upper和下界值lower,问数组中一共有多少组连续的子数组,其子数组中数字的和在上界和下界之内。

    眯眯眼的猫头鹰
  • 专栏 | CVPR 2017论文解读:特征金字塔网络FPN

    机器之心专栏 作者:李俊 近日,CVPR 2017获奖论文公布,引起了业内极大的关注。但除了这些获奖论文,还有众多精彩的论文值得一读。因此在大会期间,国内自动驾...

    机器之心

扫码关注云+社区

领取腾讯云代金券