前面詳細介紹了Java中各集合的使用,像Set集合和List集合等,另外,還結合泛型講解了一些高級應用。在實際開發(fā)中,泛型集合是較常用的,一般定義集合都會使用泛型的形式來定義。本節(jié)將使用泛型集合來模擬實現(xiàn)某圖書管理系統(tǒng)的查詢功能。 在圖書管理系統(tǒng)中為了方便管理圖書,將圖書劃分為幾個類別。每個類別下有很多圖書,每本圖書都有相對應的類別,這就具備了一對多的關系映射,即一個類別對應多本圖書。 在這種情況下就可以使用Map映射來存儲類別和圖書信息,其鍵為Category(類別)類型,值為List<Book>類型(Book類為圖書類),然后使用嵌套循環(huán)遍歷輸出每個類別所對應的多個圖書信息。具體的實現(xiàn)步驟如下。 1)創(chuàng)建表示圖書類別的Category類,在該類中有兩個屬性:id和name,分別表示編號和類別名稱,并實現(xiàn)了它們的setXxx()和getXxx()方法,具體內(nèi)容如下: public class Category { private int id; // 類別編號 private String name; // 類別名稱 public Category(int id, String name) { this.id = id; this.name = name; } public String toString() { return "所屬分類:" + this.name; } // 上面兩個屬性的setXxx()和getXxx()方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }123456789101112131415161718192021222324復制代碼類型:[java] 2)創(chuàng)建表示圖書明細信息的BookInfo類,在該類中包含5個屬性:id、name、price、author和startTime,分別表示圖書編號、名稱、價格、作者和出版時間,同樣實現(xiàn)了它們的setXxx()和getXxx()方法,具體內(nèi)容如下: public class BookInfo { private int id; // 編號 private String name; // 名稱 private int price; // 價格 private String author; // 作者 private String startTime; // 出版時間 public BookInfo(int id, String name, int price, String author, String startTime) { this.id = id; this.name = name; this.price = price; this.author = author; this.startTime = startTime; } public String toString() { return this.id + "\t\t" + this.name + "\t\t" + this.price + "\t\t" + this.author + "\t\t" + this.startTime; } // 上面5個屬性的 setXxx() 和 getXxx() 方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.id = price; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getStartTime() { return startTime; } public void setStartTime(String startTime) { this.startTime = startTime; } }123456789101112131415161718192021222324252627282930313233343536373839404142434445464748復制代碼類型:[java] 3)創(chuàng)建CategoryDao類,在該類中定義一個泛型的Map映射,其鍵為Category類型的對象,值為List<BookInfo>類型的對象,并定義printCategoryInfo()方法,用于打印類別和圖書明細信息。具體代碼如下: public class CategoryDao { // 定義泛型Map,存儲圖書信息 public static Map<Category, List<BookInfo>> categoryMap = new HashMap<Category, List<BookInfo>>(); public static void printDeptmentInfo() { for (Category cate : categoryMap.keySet()) { System.out.println("所屬類別:" + cate.getName()); List<BookInfo> books = categoryMap.get(cate); System.out.println("圖書編號\t\t圖書名稱\t\t圖書價格\t\t圖書作者\t\t出版時間"); for (int i = 0; i < books.size(); i++) { BookInfo b = books.get(i); // 獲取圖書 System.out.println(b.getId() + "\t\t" + b.getName() + "\t\t" + b.getPrice() + "\t\t" + b.getAuthor() + "\t\t" + b.getStartTime()); } System.out.println(); } } }123456789101112131415161718復制代碼類型:[java] 4)創(chuàng)建測試類Test17,在該類中定義4個Deptment對象和8個People對象,并將8個People對象分成4組,存儲到4個List集合中,然后將4個Deptment對象和4個List集合按照——對應的關系存儲到DeptmentDao類中的peoplesMap映射中。最后調(diào)用DeptmentDao類中的printDeptmentInfo()方法打印類別及對應的圖書信息。具體的代碼如下: public class Test17 { public static void main(String[] args) { Category category1 = new Category(1, "數(shù)據(jù)庫"); // 創(chuàng)建類別信息 Category category2 = new Category(2, "程序設計"); // 創(chuàng)建類別信息 Category category3 = new Category(3, "平面設計"); // 創(chuàng)建類別信息 BookInfo book1 = new BookInfo(1, "細說 Java 編程", 25, "張曉玲", "2012-01-01"); // 創(chuàng)建圖書信息 BookInfo book2 = new BookInfo(2, "影視后期處理寶典", 78, "劉水波", "2012-10-05"); // 創(chuàng)建圖書信息 BookInfo book3 = new BookInfo(3, "MySQL 從入門到精通", 41, "王志亮", "2012-3-2"); // 創(chuàng)建圖書信息 BookInfo book4 = new BookInfo(4, "Java 從入門到精通", 27, "陳奚靜", "2012-11-01"); // 創(chuàng)建圖書信息 BookInfo book5 = new BookInfo(5, "SQL Server 一百例", 68, "張曉玲", "2012-01-01"); // 創(chuàng)建圖書信息 List<BookInfo> pList1 = new ArrayList<BookInfo>(); // 向類別 1 添加圖書 pList1.add(book1); pList1.add(book4); List<BookInfo> pList2 = new ArrayList<BookInfo>(); // 向類別 2 添加圖書 pList2.add(book3); pList2.add(book5); List<BookInfo> pList3 = new ArrayList<BookInfo>(); // 向類別 3 添加圖書 pList3.add(book2); CategoryDao.categoryMap.put(category1, pList1); CategoryDao.categoryMap.put(category2, pList2); CategoryDao.categoryMap.put(category3, pList3); CategoryDao.printDeptmentInfo(); } }123456789101112131415161718192021222324復制代碼類型:[java] 在該程序中,使用了泛型List和泛型Map分別存儲圖書類別和特定類別下的圖書明細信息。從中可以看出使用泛型不僅減少了代碼的編寫量,也提高了類型的安全性。 運行該程序,輸出的結果如下所示。 所屬類別:平面設計 圖書編號 圖書名稱 圖書價格 圖書作者 出版時間2 影視后期處理寶典 78 劉水波 2012-10-05所屬類別:數(shù)據(jù)庫 圖書編號 圖書名稱 圖書價格 圖書作者 出版時間1 細說 Java 編程 25 張曉玲 2012-01-014 Java 從入門到精通 27 陳奚靜 2012-11-01所屬類別:程序設計 圖書編號 圖書名稱 圖書價格 圖書作者 出版時間3 MySQL 從入門到精通 41 王志亮 2012-3-25 SQL Server 一百例 68 張曉玲 2012-01-01 |
|
來自: 碼農(nóng)9527 > 《Java》