ArrayList LinkedList 的差異
1.ArrayList 欲加入物件時會產生一個新的物件
2.LinkedList 欲加入物件時會由加入的物件中建立下一個連結,原物件再指向新加入的物件
3.再新增元素時執行速率上Linkedlist 會比ArrayList快<
4.再搜尋時ArrayList的速度較快
檔案請參考
FS 1(fourstar) 僅用ArrayList 宣告及定義
本次須注意 ArrayList 及al.size
import java.util.*;
public class FourStar {
public static void main(String[] args) {
ArrayList al = new ArrayList();
while (al.size() < 4) {
al.add(new Integer((int)(Math.random() * 10))); (新加入亂數取值的方始)
}
// System.out.println(al);
Iterator it = al.iterator();
while (it.hasNext()) {
System.out.print( it.next() );
}
} //main
} //class
FS1 的批次檔
del *.class (kill 現有其他的class 免得衝突)
javac FourStar.java (編譯FS1的新class)
java -cp . FourStar
pause (畫面暫停)
FS2
import java.util.*;
public class FourStar2 {
public static void main(String[] args) {
LinkedList ll = new LinkedList();
while (ll.size() < 4) {
ll.add(new Integer((int)(Math.random() * 10)));
}
Iterator it = ll.iterator();
while (it.hasNext()) {
System.out.print( it.next() );
}
}
}
批次檔
del *.class
javac FourStar2.java
java -cp . FourStar2
pause
FS3
import java.util.*;
public class FourStar_Generic {
public static void main(String[] args) {
ArrayList <Integer> al = new ArrayList<Integer>();
while (al.size() < 4) {
al.add(new Integer((int)(Math.random() * 10)));
}
/*
Iterator it = al.iterator();
while (it.hasNext()) {
System.out.print( it.next() );
}
System.out.println();
*/
//sdk1.5
for( Object i : al){
System.out.print( i );
}
System.out.println();
}
}
(集合尚有map及set未講)
(先說物件導向)
轉型
List al = new ArratyList();
(ArraryList)(al) ,某特有方法();
多型
物件導向 特性
1.繼承功能 inheritance
2.封裝 Encapsulation
3.介面 interface
4.多型 polymorphism
建立模型
建立貓屬性的class及建立一個物件
public class catModle{
String name;
String color;
int age;
int weight;
public void showMe();
System.out.println("寵物名 : " +name);
System.out.println("寵物顏色: " +color);
System.out.println("寵物年齡 : " +age);
System.out.println("寵物體重 : " +weight+"kg");
如此建立一個屬於貓的物件
再建立執行測試物件是否可以run;
Test.java
public calss Test {
public static void main(String[] args)
{
catModel c1 = new catModel();
c1.name=" kitty";
c1.colot="white";
c1.age=1;
c1.weight=1.5;
c1.showMe();
繼承
public class Catson extend CatModel
{
//建立貓兒子類別繼承CatModel
//則可以使用CatModel的所有參數型態及方法
public static void main(String[] args)
{
catModel cs = new catModel();
cs.showMe();
}
}
執行結果會等於catModel的預設值
註(此段繼承老師用建立MonkeyKing及MonkeySon繼承的情形說明,詳如附圖)
MonkeyKing.java
public class MonkeyKing {
String name="孫悟空";
int skill =73;
public void showMe(String name, int skill){
System.out.println(
"我是 " +name +" 會 " +skill +" 變!"
);
}
}
MonkeySon.java
public class MonkeySon extends MonkeyKing{
String name ="孫小毛";
}
執行結果
封裝:
就是將方法中的變數加上修飾子private
讓繼承的子類別無法誤改只能利用set及get方式去儲存或取得
封裝很重要
但封裝後程式碼會變長
範例
public class Hospital {
public static void main ( String[] args ){
Human p01 = new Human();
// p01.name ="甲";
p01.setName("甲");
p01.setLegs(1);
Human p02 = new Human();
// p02.name ="乙";
p02.setName("乙");
// p02.legs =-1;
p02.setLegs(-1);
p01.showDetail();
p02.showDetail();
}
}
public class Human {
private String name;
private int legs =2;
public void setName( String name ){
if ( name !=null ){
this.name = name;
} else {
throw new IllegalArgumentException();
}
}
public String getName(){
return name;
}
public void setLegs( int legs ){
if ( legs >=0 ){
this.legs = legs;
} else {
throw new IllegalArgumentException("有問題, 腿數: " +legs);
}
}
public int getLegs(){
return legs;
}
public void showDetail(){
System.out.println(
"傷患: " +name +"\n"
+"腿數: " +legs
);
}
}
封裝後可以避免錯誤值的輸入
但程式碼相對變長
介面:
1.第一個程式 fly.java
宣告一個介面 除了給了一個參數behave外,其餘只有定義方法名稱,其內容都要讓實作這個類別的Bird.java來設定其內容。
如果實作的類別Bird.java沒有完整設定其內容的話
測試的檔案Test.java執行時就會遇到錯誤!
多型 (範例五)
同時扮演多個腳色,同時繼承兩個不同的類別,
多型另一實例 員工 經理 的員工資料
員工.java
經理.java
test.java
Test.java執行過後
小明原本就是以員工class定義
老王是以經理定義
老蔣是以員工宣告定義是經理的類別
(心得:應該自己回家再試做一遍)
最後 介紹 UML
程式流程圖畫完後轉程式碼(60~70%)
工具程式(免費) UMBRELLO (KDE)
IBM 工具程式 INNOVATION
沒有留言:
張貼留言