Java数据结构之数组

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

直接上代码:

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 < 0) {
            throw new ArrayIndexOutOfBoundsException();
        }

        return arr[index];
    }

    // 显示数据,也就是,打印数组里的内容
    public void display() {

        // 说明,此时数组里,还没有内容呢
        if (elements <= 0) {
            return;
        }

        System.out.print("[ ");

        for (int i = 0; i < elements; i++) {
            System.out.print(arr[i] + " ");
        }

        System.out.println("]");
    }

    // 根据输入的值,来返回 索引值
    public int getIndexByValue(long value) {

        int i = 0;

        for (; i < elements; i++) {
            if (arr[i] == value) {
                // 如果找到的话,就立即返回索引值
                return i;
            }
        }

        return -1;
    }

    // 根据索引值,来删除数组里的元素
    public void delete(int index) {
        if (index >= elements || index < 0) {
            throw new ArrayIndexOutOfBoundsException();
        }

        // 将后面的元素,往前移动
        for (int i = index; i < elements; i++) {
            arr[i] = arr[i + 1];
        }

        // 最后,将有效值,减一
        elements--;
    }

    // 更新值
    public void update(int index, long newValue) {
        if (index >= elements || index < 0) {
            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上了:

https://github.com/xej520/xingej-algorithm

时间: 2024-10-12 11:11:57

Java数据结构之数组的相关文章

java 数据结构 用数组实现队列

代码内容 1 package com.structure; 2 3 import java.util.Scanner; 4 5 /** 6 * @auther::9527 7 * @Description: 数组模拟队列 8 * @program: jstl2 9 * @create: 2019-10-05 08:58 10 */ 11 public class ArrayQueueDemo { 12 public static void main(String[] args) { 13 Sca

Java 数据结构之数组

public class Arrays { //创建一个Integer空数组 public static Integer[] player=null; //添加球员号码 private static int size=0;//初始化数组的元素个数 static StringBuffer sb=new StringBuffer(); public static void init(int initialCapacity){//初始容量为5的线性列表,用来存储数据 player=new Intege

Java数据结构和算法(二)——数组

数组的用处是什么呢?--当你需要将30个数进行大小排列的时候,用数组这样的数据结构存储是个很好的选择,当你是一个班的班主任的时候,每次要记录那些学生的缺勤次数的时候,数组也是很有用.数组可以进行插入,删除,查找等. 1)创建和内存分配 Java中有两种数据类型,基本类型和对象类型,也有人称为引用类型,Java中把数组当成对象,创建数组时使用new操作符. int array[] = new int[10]; 既然是对象,那么array便是数组的一个引用,根据Java编程思想(一) -- 一切都是

Java数据结构和算法之数组与简单排序

一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 一维数组 一维数组(one‐dimensional array )实质上是相同类型变量列表.要创建一个数组,你必须首先定义数组变量所需的类型.通用的一维数组的声明格式是: type var‐name[ ]; 获得一个数组需要2步: 第一步,你必须定义变量所需的类型. 第二步,你必

【数据结构】数组操作(LowArrayApp.java)

1 // LowArrayApp.java 2 // demonstrates array class with low-level interface 3 // to run this program: C>java LowArrayAPP 4 //java数据结构和算法(第二版)拉佛 著 pdf第46页 数组操作 5 6 package first; 7 8 class LowArray 9 { 10 private long[] a; // ref to array a 11 12 pub

【数据结构】数组操作(HighArrayApp.java)

1 // java 数据结构和算法第二版 拉佛 著 2 // 数组的操作 3 4 package first; 5 6 class HighArray { 7 private long[] a; 8 private int nElems; 9 10 public HighArray(int max) { 11 a = new long[max]; 12 nElems = 0; 13 } 14 15 public void insert(long value) { 16 a[nElems] = v

Java数据结构与算法之数组

数组特点: 1.大小固定 2.同一数据类型 3.下标访问 4.数据项可重复 Java数据类型:基本类型(int和double)和对象类型.在许多编程语言中,数组也是基本类型.但在Java中把它们当作对象来对待,因此在创建数组时必须使用new操作符. 有序数组与无序数组比较:最主要的好处是查找速度比无序数组快多了.不好的方面是在插入操作中由于所有靠后的数据都需要移动以疼开空间,所以速度较慢.有序数组和无序数组数据中的删除操作都很慢,这是因为数据项必须向前移动来填补已删除数据项的空洞. 数据访问:从

Java数据结构和算法(二)——数组

上篇博客我们简单介绍了数据结构和算法的概念,对此模糊很正常,后面会慢慢通过具体的实例来介绍.本篇博客我们介绍数据结构的鼻祖——数组,可以说数组几乎能表示一切的数据结构,在每一门编程语言中,数组都是重要的数据结构,当然每种语言对数组的实现和处理也不相同,但是本质是都是用来存放数据的的结构,这里我们以Java语言为例,来详细介绍Java语言中数组的用法. 1.Java数组介绍 在Java中,数组是用来存放同一种数据类型的集合,注意只能存放同一种数据类型. ①.数组的声明 第一种方式: 数据类型 []

《Java数据结构和算法》- 数组

Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new操作符: int [] objArray = null; // defines a reference to an array objArray = new int[100]; // creates the array, and sets objArray to refer to it 或使用等价的