Day11 —— Sequential List
1. Background
今天是学习java的第11天,结束了java基础的,转到了数据结构的学习。
今天学习的内容是用java创建顺序表,及其一些操作。
2. Description
2.1 Object
对象:数据及其上操作的总和。由于java是面向对象编程的语言,所以弄懂面向对象是非常重要的。
2.2 Overload
重载(Overload),在我的理解里面是在同一个类中,相同的方法名,但是里面传参不一样,就可以把这两个看作不同的方法。在今天的代码中SequentialList(int[] paraArray)
这个方法,就用到了重载。
2.3 Override
重写(Override),我对其的理解没有重载深入,在我看来这个顾名思义,就是把原来的方法覆盖掉了,不管传参怎么样,简单粗暴的把原来的方法覆盖就完事。这个一般用在子类对父类的方法覆盖中。
以上均属个人浅薄理解,具体的可以看看菜鸟教程对其的解释Overload and Override
3. Code
package basic;
public class SequentialList {
/**
* The max length of list.
*/
public static final int MAX_LENGTH = 20;
int length;
/**
* The data stored in the array.
*/
int[] data;
/**
* Construct an empty sequential list.
*/
public SequentialList() {
length = 0;
data = new int[MAX_LENGTH];
}// Of the SequentialList
/**
******************
* Overload the method.The length of paraArray must be not exceed MAX_LENGTH.
*
* @param paraArray is the given array.
******************
*/
public SequentialList(int[] paraArray) {
data = new int[MAX_LENGTH];
length = paraArray.length;
// Copy data
for (int i = 0; i < paraArray.length; i++) {
data[i] = paraArray[i];
} // Of for i
} // Of the second constructor
/**
******************
* Overrides toString.
******************
*/
public String toString() {
String resultString = "";
if (length == 0) {
return "empty";
} // Of if
for (int i = 0; i < length - 1; i++) {
resultString += data[i] + ", ";
}
resultString += data[length - 1];
return resultString;
} // Of to String
/**
*
* Reset to empty.
*
*/
public void reset() {
length = 0;
} // Of reset
public static void main(String[] args) {
int[] tempArray = { 1, 3, 5, 7, 9 };
SequentialList tempFirstList = new SequentialList(tempArray);
System.out.println("Initialized, the list is: " + tempFirstList.toString());
System.out.println("the list is" + tempFirstList);
tempFirstList.reset();
System.out.println("After reset, the list is: " + tempFirstList);
} // Of main
} // Of SequentialList
运行结果:
4. Summarize
今天的学习对我来说无疑是收获最大的,也是最吃力的。
由于第一次接触java,之前学习的数据结构也都是基于C语言的,在今天的学习之前,压根没有重载和重写这个概念。虽然现在知道了之后觉得这个很简单,但是在不知道这个概念之前,代码我看起来总觉得晦涩难懂。
总的来说,收获很大吧,不管是代码,还是我在写代码途中去查阅的资料。
PS:在重写toString方法里面。for循环copy数据,只循环到倒数第二个,不是因为最后一个是\0,仅仅只是为了让最后一个元素后面没有逗号’,’。java中数组最后没有\0,这点和C语言不一样。对于这个,我的理解是,不要用面向过程的思维来思考面向对象。在java中everything is object,这点字符串也不例外,字符串本身就是一个对象,本身就有着length这个属性,因此可以直接判定其边界,不需要\0这种东西。
最后就是,老师的代码第一句:package datastructure.list;
这个我放上去始终报错。我的猜想是datastructure.list这个包名不规范,所以把程序又移回了basic包里面,这才成功运行。