自定义数组(面向对象编程):

直接上代码:package com.xingej.algorithm.datastructure.array;

/**

* 面向对象编程

*

* 自定义类数组

*

* 你一定要明白,这是在JDK基础之上的封装,要学会这种思路,其他框架如netty 也是在前者的基础上封装而来的,如有一

*

* 部分是封装的线程池

*

* @author erjun 2017年11月28日 下午9:42:10

*/

public class MyArray {

// 定义的数据结构,类型是 数组

// 这是最核心的组件,其他都是围绕这个来进行操作的

private long[] arr;

// 表示有效数据的长度,也就是说,数组里有多少个数组

private int elements;

public MyArray() {

// 默认可以存储50个数字

arr = new long[50];

}

public MyArray(int maxsize) {

arr = new long[maxsize];

}

// 插入数据

public void insert(long value) {

arr[elements] = value;

// 每次插入数据,都会自增一次

elements++;

}

// 根据索引,来查找数据

public long get(int index) {

if (index >= elements || index

throw new ArrayIndexOutOfBoundsException();

}

return arr[index];

}

// 显示数据,也就是,打印数组里的内容

public void display() {

// 说明,此时数组里,还没有内容呢

if (elements <= 0) {

return;

}

System.out.print("[ ");

for (int i = 0; i

System.out.print(arr[i] + " ");

}

System.out.println("]");

}

// 根据输入的值,来返回 索引值

public int getIndexByValue(long value) {

int i = 0;

for (; i

if (arr[i] == value) {

// 如果找到的话,就立即返回索引值

return i;

}

}

return -1;

}

// 根据索引值,来删除数组里的元素

public void delete(int index) {

if (index >= elements || index

throw new ArrayIndexOutOfBoundsException();

}

// 将后面的元素,往前移动

for (int i = index; i

arr[i] = arr[i + 1];

}

// 最后,将有效值,减一

elements--;

}

// 更新值

public void update(int index, long newValue) {

if (index >= elements || index

throw new ArrayIndexOutOfBoundsException();

}

arr[index] = newValue;

}

}

测试用例:package com.xingej.algorithm.datastructure.array;

import org.junit.Before;

import org.junit.Test;

import com.xingej.algorithm.datastructure.array.MyArray;

/**

* 面向对象编程,

*

* 也就是说,你操作的 都是对象,而非基本数据类型了

*

*

* @author erjun 2017年11月28日 下午9:59:36

*/

public class MyArrayTest {

private MyArray myArray;

@Before

public void init() {

myArray = new MyArray();

testInsert();

}

// 插入数据测试

@Test

public void test() {

myArray.insert(20);

System.out.println("----:\t" + myArray.get(0));

}

@Test

public void testInsert() {

myArray.insert(20);

myArray.insert(10);

myArray.insert(5);

myArray.insert(30);

}

// 显示/打印数组里的内容

@Test

public void testDisplay() {

myArray.display();

}

// 显示/打印数组里的内容

@Test

public void testGetIndexByValue() {

System.out.println("---索引值是:\t" + myArray.getIndexByValue(20));

}

// 根据下标,来删除指定位置的元素

@Test

public void testDelete() {

System.out.println("---删除之前打印数组里的元素------");

myArray.display();

myArray.delete(5);

System.out.println("---删除之后打印数组里的元素------");

myArray.display();

}

@Test

public void testUpdate() {

myArray.update(2, 100);

System.out.println("---更新之后的值----:\t" + myArray.get(2));

}

}

代码已经上传到git上了:

java数组数据结构_Java数据结构之数组相关推荐

  1. java中数组的数据结构_Java数据结构与算法(一)--数组

    目录 数组是应用最广泛的数据存储结构.它被植入大部分的编程语音.在Java中数组用来存放一种类型的集合. 1.数组的介绍 ①数组的声明 第一种方式: int[] arr = new int[10];/ ...

  2. java链表模型_Java数据结构和算法(七)——链表

    前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...

  3. java 设置数组长度_java如何增加数组长度

    遇到一个面试题:在不使用list的add方法的情况下,动态的添加元素(大概是这个样子): ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,需学习arraylist的相关知识(ht ...

  4. java数组语法_Java 基本语法----数组

    数组 数组概述 数组是多个相同类型数据的组合,实现对这些数据的统一管理. 数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任何数据类型,包 ...

  5. java交换二维数组行列_java二维数组行列

    培训系列AmberXie 求二维数组行列之和把二维数组 a 各行之和分别放入 b... 二维数组例题答案[技巧] [例 1]编写程序,利用二维数组在窗体上输出如图 5x5...如果没有 max 为行列 ...

  6. java二维数组坐标_Java 二维数组

    二维数组的定义 二维数组本质上是以数组作为数组元素的数组,即"数组的数组". 因为数组只能保存一行数据.在生活中,比如坐标等等,我们需要用二维数组来表示.通过行号和列好来定位数据. ...

  7. java二维数组试题_Java二维数组及习题总结

    二维数组 二维数组:就是一个由行和列组成的一个矩阵(Matrix):在这个矩阵中访问元素时,是根据元素的行角标和列角标所确定的. 二维数组在内存中的存储:无论是二维数组,还是多维数组,它们本身就是一个 ...

  8. java对象类型数组赋值_java声明对象数组

    java如何对象创建数组并初始化 急夜影驱动编程小编今天和大家分享答案 /** * 功能:声明一个学生类 * @author qqliweng * 时间:2009-10-22 * 版本:V1.0 */ ...

  9. java二维数组添加元素_Java二维数组与动态数组ArrayList类详解

    java二维数组 java 语言中提供的数组是用来存储固定大小的同类型元素. 1.二维数组初始化和声明 数组变量的声明,和创建数组可以用一条语句完成,如下所示: int a[][] = new int ...

最新文章

  1. ExtJs选项卡,求大神解答
  2. Linux命令详解----iostat
  3. 机器学习之集成学习(一)
  4. 关于 webapi ajax进度条信息设置
  5. 多决策决策树_授权员工决策时,意图就是一切
  6. KICKSTART 语法参考
  7. canvas js 绘图插件_快速入门前端图表插件Echart
  8. unity 0 Asset Store ,package如何快速导入,快捷键
  9. linux的shell命令
  10. AJAX——ASP.NET AJAX框架(一)ScriptManager
  11. matlab 好看的颜色代码,科学网—什么是好的颜色表(colormap)? - 雷朝阳的博文...
  12. 华为C语言编程规范(精华总结)
  13. laravel 打包成zip并下载
  14. HDB3码和AMI码通过Matlab实现编码和解码
  15. 微信多开源码 android,微信(WeChat)电脑端多开分析+源码
  16. 从 B 站火到 GitHub,国人开发者又一黑科技面世!
  17. 使用 Audacity 录音
  18. linux 设置系统时钟,linux clock命令查看和设置硬件时钟
  19. 人力资源机器_人力资源部门的机器学习和AI
  20. matlab打开笔记本摄像头_如何利用MATLAB实现摄像头视频获取和保存

热门文章

  1. 手机qq浏览器怎么设置上下翻页按钮 手机qq浏览器设置上下翻页按钮的方法
  2. Win7文件夹属性没有共享标签页的解决方法
  3. 搜狐视频如何上传原创视频
  4. C++11新特性探究:显式override和final
  5. 导出为Excel例子 java
  6. Mybatis的xml配置实例
  7. electron-vue解决打包错误、无法调用出开发者工具(亲测有效)
  8. Mysql 如果有多个可选条件怎么加索引_MySQL|mysql-索引
  9. SpringBoot 使用AOP功能
  10. Mybatis 插入时获取主键的方式