java如何制作简单的数组_【数据结构与算法】Java制作一个简单数组类

不要小瞧数组 - 制作一个数组类

1 、使用Java中的数组

数组基础

把数据码成一排进行存放

数组名最好要有语义 如: scores

索引从零开始 0 1 2 3 4 5

数组N个元素 数组最后一个索引 N - 1

简单使用

Array

public class Main {

public static void main(String[] args) {

int[] arr = new int[20];

for (int i = 0; i < arr.length; i++)

arr[i] = i;

int[] scores = new int[]{100, 99, 98};

for (int i = 0; i < scores.length; i++)

System.out.println(scores[i]);

for(int score: scores)

System.out.println(score);

}

}

2、二次封装属于我们自己的数组

数组基础

索引可以有语意,也可以没有语意。

数组最大的优点:快速查询。scores[1] 指定索引查询对应的值

数组最好应用于“索引有语意”的情况。

但并非所有有语意的索引都适用于数组

数组也可以处理“索引没有语意的“

这一章主要处理“索引没有语意的“的情况数组的使用

数组创建已经固定了

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

索引没有语意,如何表示没有元素呢?

如何添加元素?如何删除元素?

基于java的数据,二次封装属于我们自己的数组类

不同的数据结构增删改查是截然不同的,甚至有些数据结构可能会忽略这四个中的某个一个动作。

数组 容量 capacity

数组中最多可以装多少个元素和实际装了多少个元素是没有关系的 ,两回事。

size 数组中的元素个数

简单定义Array类

Array类

/**

* @create 2019-11-14 21:27

*/

public class Array {

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;

}

//返回数组是否为空

public boolean isEmpty(){

return size == 0;

}

}

3、向数组中添加元素

向数组末添加元素e

//向所有元素后添加一个新元素

public void addLast(int e){

if (size == data.length) {

throw new IllegalArgumentException("AddLast failed.Array is full.");

}

data[size] = e;

size ++;

//data[size++] = e;

}

在特定的位置插入一个新元素e

// 在第index个位置插入一个新元素e

public void add(int index,int e){

if (size == data.length) {

throw new IllegalArgumentException("Add failed. Array is full.");

}

if (index < 0 || index > size) {

throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size.");

}

for(int i = size -1; i >= index; i--){

data[i+1] = data[i];

}

data[index] = e;

size ++;

}

复用add

//向所有元素后添加一个新元素

public void addLast(int e){

add(size,e);

}

//在所有元素前添加一个新元素

public void addFirst(int e){

add(0,e);

}

2-4 数组中查询元素和修改元素

toString

@Override

public String toString(){

StringBuilder res = new StringBuilder();

res.append(String.format("Array: size = %d ,capacity = %d\n", size, data.length));

res.append('[');

for (int i = 0; i < size; i ++){

res.append(data[i]);

if (i != size -1){

res.append(",");

}

}

res.append(']');

return res.toString();

}

获取index索引位置的元素

//获取index索引位置的元素

int get(int index){

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

return data[index];

}

修改index索引位置的元素为e

// 修改index索引位置的元素为e

void set(int index, int e){

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

data[index] = e;

}

Test 测试

Main类

public class Main {

public static void main(String[] args) {

Array arr = new Array(20);

for (int i = 0; i < 10; i ++){

arr.addLast(i);

}

System.out.println(arr);

arr.add(1,100);

System.out.println(arr);

arr.addFirst(-1);

System.out.println(arr);

System.out.println(arr.get(0));

arr.set(0,100);

System.out.println(arr.get(0));

}

}

结果:

Array: size = 10 ,capacity = 20

[0,1,2,3,4,5,6,7,8,9]

Array: size = 11 ,capacity = 20

[0,100,1,2,3,4,5,6,7,8,9]

Array: size = 12 ,capacity = 20

[-1,0,100,1,2,3,4,5,6,7,8,9]

-1

100

5、包含,搜索和删除

删除指定index位置的元素,返回删除的元素

//从数组中删除index位置的元素,返回删除的元素

public int remove(int index){

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

int ret = data[index];

for (int i = index + 1; i < size; i ++ ){

data[i-1] = data[i];

}

size --;

return ret;

}

删除指定元素e

//从数组中删除元素e

public void removeElemet(int e){

int index = find(e);

if (index != -1){

remove(index);

}

}

从数组中删除第一个元素,返回删除的元素

// 从数组中删除第一个元素,返回删除的元素

public int removeFirst(){

return remove(0);

}

从数组中删除最后一个元素,返回删除的元素

// 从数组中删除最后一个元素,返回删除的元素

public int removeLast(){

return remove(size-1);

}

查找数组中是否有元素e

//查找数组中是否有元素e

public boolean contains(int e) {

for (int i = 0; i < size; i++) {

if (data[i] == e) {

return true;

}

}

return false;

}

查找数组中元素e所在的索引,如果不存在元素e,则返回-1

//查找数组中元素e所在的索引,如果不存在元素e,则返回-1

public int find(int e) {

for (int i = 0; i < size; i++) {

if (data[i] == e) {

return i;

}

}

return -1;

}

Array 类

/**

* @author Liu Awen Email:willowawen@gmail.com

* @create 2019-11-14 21:27

*/

public class Array {

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;

}

//返回数组是否为空

public boolean isEmpty() {

return size == 0;

}

//向所有元素后添加一个新元素

public void addLast(int e) {

add(size, e);

}

//在所有元素前添加一个新元素

public void addFirst(int e) {

add(0, e);

}

// 在第index个位置插入一个新元素e

public void add(int index, int e) {

if (size == data.length) {

throw new IllegalArgumentException("Add failed. Array is full.");

}

if (index < 0 || index > size) {

throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size.");

}

for (int i = size - 1; i >= index; i--) {

data[i + 1] = data[i];

}

data[index] = e;

size++;

}

//获取index索引位置的元素

public int get(int index) {

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

return data[index];

}

// 修改index索引位置的元素为e

public void set(int index, int e) {

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

data[index] = e;

}

//查找数组中是否有元素e

public boolean contains(int e) {

for (int i = 0; i < size; i++) {

if (data[i] == e) {

return true;

}

}

return false;

}

//查找数组中元素e所在的索引,如果不存在元素e,则返回-1

public int find(int e) {

for (int i = 0; i < size; i++) {

if (data[i] == e) {

return i;

}

}

return -1;

}

//从数组中删除index位置的元素,返回删除的元素

public int remove(int index){

if (index < 0 || index >= size)

throw new IllegalArgumentException("Get failed.Index is illegal");

int ret = data[index];

for (int i = index + 1; i < size; i ++ ){

data[i-1] = data[i];

}

size --;

return ret;

}

// 从数组中删除第一个元素,返回删除的元素

public int removeFirst(){

return remove(0);

}

// 从数组中删除最后一个元素,返回删除的元素

public int removeLast(){

return remove(size-1);

}

//从数组中删除元素e

public void removeElemet(int e){

int index = find(e);

if (index != -1){

remove(index);

}

}

@Override

public String toString() {

StringBuilder res = new StringBuilder();

res.append(String.format("Array: size = %d ,capacity = %d\n", size, data.length));

res.append('[');

for (int i = 0; i < size; i++) {

res.append(data[i]);

if (i != size - 1) {

res.append(",");

}

}

res.append(']');

return res.toString();

}

}

Test 测试

public class Main {

public static void main(String[] args) {

Array arr = new Array(20);

for (int i = 0; i < 10; i ++){

arr.addLast(i);

}

System.out.println(arr);

arr.add(1,100);

System.out.println(arr);

arr.addFirst(-1);

System.out.println(arr);

// [-1,0,100,1,2,3,4,5,6,7,8,9]

arr.remove(2);

System.out.println(arr);

arr.removeElemet(4);

System.out.println(arr);

arr.removeFirst();

System.out.println(arr);

System.out.println("数组arr是否存在0元素" + arr.contains(0));

System.out.println("元素0的索引为" + arr.find(0));

}

}

result:

Array: size = 10 ,capacity = 20

[0,1,2,3,4,5,6,7,8,9]

Array: size = 11 ,capacity = 20

[0,100,1,2,3,4,5,6,7,8,9]

Array: size = 12 ,capacity = 20

[-1,0,100,1,2,3,4,5,6,7,8,9]

Array: size = 11 ,capacity = 20

[-1,0,1,2,3,4,5,6,7,8,9]

Array: size = 10 ,capacity = 20

[-1,0,1,2,3,5,6,7,8,9]

Array: size = 9 ,capacity = 20

[0,1,2,3,5,6,7,8,9]

数组arr是否存在0元素true

元素0的索引为0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值