自定义数组

  数组是一种容器,最简单的数据结构,其物理地址是连续的,所以,其长度是固定的。

  数组一旦定义:数据类型,长度均被固定,所以不能实现增加删除的操作

一.简单定义:

建立一个学生类,在测试文件中定义一个学生类的数组用来存放学生信息

public class Student{

private String name;

//构造方法

public Student(String name){

this.name = name;

}

public void study(){

System.out.println(name+"正在学习...");

}

}



public class Test{

public static void main(String[] args){

  //创建学生类型的数组

Student[] array = new Student[10];

  //循环创建多个学生对象,并将其放入数组中

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

Student stu = new Student("学生"+i);

array[i] = stu;

}

array[2].study();

}

}

控制台输出为:学生2正在学习...

其中,创建学生对象的时候,有个小技巧:new Student(“学生”+i);构造函数中的参数定义为字符串

类型,但想让控制台能够输出具体的学生号,便在i前加一个字符串类型的,整个参数还是字符串类型的。

只要是数字和字符串绑定在一起作为参数,便能整体作为字符串类型使用


二.运用数组,自定义一个类MyList;能实现数据增删查改的功能

  关键是:首先重新声明一个目标数组 

1.add(int a);在末尾添加一个整形的a:定义数组长度=原始数组的长度+1

2.addN(int a,int index);在原数组指定的索引位置,插入一个整型的数据a:数组长度=原始数组的长度+1

3.delet(int index);删除数组中下标为index的那个数据:数组长度=原始数组的长度-1

4.deletSame(int a);删除数组中值为a的所有数据:数组长度=原始数组的长度-a的个数

 其中,解释一下第二个和第四个方法:注意,遍历的对象始终是原始数据,参照的下标为原始数组的下标

public void addN(int a,int index){

int[] destArray=new int[srcArray.length+1];

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

if(i<index){

destArray[i]=srcArray[i]; //索引前的数据跟原始数据一样排放

}else if(i==index){

destArray[i]=a; //将a插入index指定的位置

}else{

   destArray[i+1]=srcArray[i]; //下标后移一位,留出目标数组index后面一位用来存储index处未被新数据覆盖之前的那个数

 }

}

destArray[index+1]=srcArray[index];  //添加被新数据覆盖掉的那个原始数据

srcArray=destArray;  // 原始数组指向目标数组,交换

}


public void deletSame(int a){

int count=0; //用来计算目标数组的长度需要比原始数组短多少

int finger=0;

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

if(srcArray[i]==a){

count++;

}

}

int[] destArray=new int[srcArray.length-count];

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

if(srcArray[i]==a){

finger++;  //每遇到一个要删除的数,目标数组的下标都会改变一次

}else {

destArray[i-finger]=srcArray[i];

}

}

srcArray=destArray;

}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值