数组是一种容器,最简单的数据结构,其物理地址是连续的,所以,其长度是固定的。
数组一旦定义:数据类型,长度均被固定,所以不能实现增加删除的操作
一.简单定义:
建立一个学生类,在测试文件中定义一个学生类的数组用来存放学生信息
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;
}