综合案例:数组操作
数组的核心操作类:Array
分析:
1 类里面可以进行整型数组操作
里面有一个专门的整型数组;
class Array{//定义一个数组的操作类
private int [] data;
}
2 可以通过外部传递大小,需要提供一个构造方法,并且这个构造方法需要接收一个一个数组大小的参数;
class Array{//定义一个数组的操作类
private int [] data;
public Array(int len){//实例化本类对象时必须设置数组大小
if(len<=0){
this.data=new int[1];//至少维持一个大小的数组
}else{
this.data=new int[len];//根据传入的大小定义数组长度
}
}
}
public class Hello{
public static void main(String args[]){
}
}
3 根据索引保存数据
private int foot; //作为保存的脚标
public boolean add(int num){//如果保存成功返回true,否则是false
if(this.foot<this.data.length){//还有空间可以保存数据
this.data[this.foot++]=num;//保存数据的同时改变foot的内容
return true;
}
return false;
}
4 数组输出不能在类中直接完成,一定要返回给被调用处处理。
public int[] getData(){//返回全部数据
return this.data;
}
5 在外部调整已有数组大小。
public void inc(int size){//已有基础上扩充数组大小
if(size>0){
int[] newData = new int [this.data.length+size];
System.arraycopy(this.data, 0, newData, 0, this.data.length);
this.data = newData;//改变引用
}
}
范例:程序测试
public class Hello{
public static void main(String args[]){
Array arr = new Array(5);//开始有5个元素
System.out.println(arr.add(90));
System.out.println(arr.add(10));
System.out.println(arr.add(100));
System.out.println(arr.add(65));
System.out.println(arr.add(7));
arr.inc(3);//扩充容量
System.out.println(arr.add(70));
System.out.println(arr.add(15));
System.out.println(arr.add(6));
for(int x=0;x<arr.getData().length;x++){
System.out.print(arr.getData()[x]+" ");
}
}
}
排序数组类
对于排序的操作从本质上讲,与数组Array类的操作差别不大,只不过它最后返回的结果应该是排序的。getData方法负责返回结果,但是这个结果没有排序,不过可以利用覆写来解决此类问题。
范例:定义排序数组子类
class SortArray extends Array{//排序子类
public SortArray(int len){
super(len);
}
public int[] getData(){
java.util.Arrays.sort(super.getData());
return super.getData();
}
}
public class Hello{
public static void main(String args[]){
SortArray arr = new SortArray(5);//开始有5个元素
System.out.println(arr.add(90));
System.out.println(arr.add(10));
System.out.println(arr.add(100));
System.out.println(arr.add(65));
System.out.println(arr.add(7));
arr.inc(3);//扩充容量
System.out.println(arr.add(70));
System.out.println(arr.add(15));
System.out.println(arr.add(6));
for(int x=0;x<arr.getData().length;x++){
System.out.print(arr.getData()[x]+" ");
}
}
}
反转子类
只是在使用getDate()方法的时候返回的是一个反转后的结果。
范例:反转子类
class ReverseArray extends Array{
public ReverseArray(int len){
super(len);
}
public int[] getData(){
int center = super.getData().length/2;
int head = 0;
int tail = super.getData().length-1;
for(int x=0; x<center; x++){
int temp = super.getData()[head];
super.getData()[head]=super.getData()[tail];
super.getData()[tail]=temp;
head++;
tail--;
}
return super.getData();
}
}
public class Hello{
public static void main(String args[]){
ReverseArray arr = new ReverseArray(5);//开始有5个元素
System.out.println(arr.add(90));
System.out.println(arr.add(10));
System.out.println(arr.add(100));
System.out.println(arr.add(65));
System.out.println(arr.add(7));
arr.inc(3);//扩充容量
System.out.println(arr.add(70));
System.out.println(arr.add(15));
System.out.println(arr.add(6));
int temp [] = arr.getData();
for(int x=0;x<temp.length;x++){
System.out.print(temp[x]+" ");
}
}
}
面向对象继承关系的设计思路:
- 父类的设计很重要,父类中的方法必须要有意义;
- 子类定义的时候就应该已经明确该类的功能是什么;
- 子类在操作过程中,如果发现父类的方法不好用了,优先考虑的是覆写,而不是建立新的方法。