Java圖書管理系統練習程式(四)
Java圖書管理系統練習程式(四)
本部分主要介紹List的基本操作與Java中泛型的使用。
一、Java中泛型的使用
泛型,即“引數化型別”。一提到引數,最熟悉的就是定義方法時有形參,然後呼叫此方法時傳遞實參。那麼引數化型別怎麼理解呢?顧名思義,就是將型別由原來的具體的型別引數化,類似於方法中的變數引數,此時型別也定義成引數形式(可稱之為型別引數),然後在使用/呼叫時傳入具體的型別(型別實參)。
泛型的本質是為了引數化型別(在不建立新的型別的情況下,通過泛型指定的不同型別來控制形參具體限制的型別)。也就是說在泛型使用過程中,操作的資料型別被指定為一個引數,這種引數可以用在類、介面和方法中,分別被稱為泛型類、泛型介面、泛型方法。
例1.編寫一個類,將任意一個整數(int)按下面格式輸出,“我是一個數:100”。
那麼這個類很好寫,如下
public class OutNumber { private int n; public OutNumber(int n){ this.n=n; } public void printN(){ System.out.println("我是一個數 :"+n); } }
那麼接下來,我們要再寫一個類,將一個字串(String)也要按以下的格式輸出,那麼這個類也很簡單,程式碼如下:
public class OutSting { private String n; public OutSting(String n){ this.n=n; } public void printN(){ System.out.println("我是一個數:"+n); } }
仔細分析以上兩個類,我們發現,這兩個類對資料處理的方法是相同的,只是處理的型別是不同的。如果我們可以寫一個類,定義類時,並不指明資料的型別,在使用的時候再指明型別。那麼我們可以採用以下的方式。
public class OutNumber<E> { private E n; public OutNumber(E n){ this.n=n; } public void printN(){ System.out.println("我是一個數:"+n); } }
public class Demo1 { public static void main(String[] args) { OutNumber<Integer> o1=new OutNumber<>(10); o1.printN(); OutNumber<String> o12=new OutNumber<>("字串 "); o12.printN(); } }
這就是泛型的一種使用,稱為泛型類
1.泛型類
class 類名稱 <泛型標識>{
private 泛型標識 成員變數名;
......
}
注意:
泛型的型別引數只能是類型別(包括自定義類),不能是簡單型別(比如int與Integer)
傳入的實參型別需與泛型的型別引數型別相同,
如OutNumber<Integer> o1=new OutNumber<>(10);
2.泛型介面
其使用方法與泛型類基本相同。
在本練習程式中,主要使用了泛型類和泛型介面。
二、List的基本操作
在本練習程式中,如果採用陣列存放若干個使用者的資訊,在宣告陣列時,就必須同時宣告陣列的長度,即我們的程式只能儲存多少個使用者,如果我們宣告的過大,會造成記憶體的浪費,如果我們宣告的陣列太小,即長度過短,會造成資料溢位的錯誤。
而List可以解決這個問題。它的大小是動態可改變的,其儲存的資料型別也是多樣的。例如以下程式碼
List<Student> lists=new ArrayList<>();
在以上程式碼中,List是一個介面,ArrayList是該介面的一個實現類。通過以上程式碼,我們即建立一個儲存Student物件的集合。
1.向集合中新增、刪除元素
Student student=new Student(1,"張三丰","武當山"); lists.add(student);//將student物件新增到集合中 lists.remove(student);//將student物件從集合中移除
2.判斷List中是否包含某個元素
lists.contains(student)
3.根據元素在集合中的索引值取得元素
Student stu=lists.get(0);
4.取得物件在集合中的索引值
lists.indexOf(student);
5.判斷集合是否為空
lists.isEmpty();
以上是在本練習程式中,用到的有關List集合的相關內容。其它的方法,可以參考Java API文件。