吳飛燕



摘 要:在Java面向對象程序設計中,創建數組時必須指明數組的長度,且長度固定、不能改變,同一個數組只能存放同一種數據類型的數據。然而,在實際情況下,數據的個數和類型需要根據實際情況進行相應的調整的。為此,提出選擇Java中合適的集合容器List接口、ArrayList實現類來設計并實現房源出租信息系統。實踐表明,該方法可以提高開發效率。
關鍵詞:Java集合框架;List接口;ArrayList類;房源出租
中圖分類號:TP311.13 文獻標識碼:A 文章編號:1003-5168(2021)29-0015-04
Design and Implementation of House Rental Information
Management Based on Java Collection
WU Feiyan
(College of Internet of Things, Jiangxi Teachers College,Yingtan Jiangxi 335000)
Abstract: In java object-oriented programming, when creating an array, the length of the array must be specified, and the length is fixed and cannot be changed. The same array can only store data of the same data type. However, in practice, the number and type of data are adjusted accordingly. Therefore, to propose to select the appropriate collection container list interface and ArrayList implementation class in Java to design and implement the house rental information system. Practice shows that this method can improve the development efficiency.
Keywords: Java collection framework;List interface;ArrayList class;house rental
集合(Collection)[1]也叫作容器(Container),是一種將多個元素聚合起來組成一個單元的對象。它常常用來儲存、檢索、操作聚合的數據。集合與數組的區別有以下3點:①長度區別,數組的長度固定,不可更改,而集合長度可變,在保證不超出內存的前提下,可以隨時添加和刪除元素;②內容區別,數組可以存放基本類型數據和引用類型數據,集合只能存放引用類型數據;③元素內容區別,數組只能存儲同一種類型的數據,而集合可以存儲不同類型的數據。
1 Java集合框架
Java集合框架[2](Java Collections Framework)是Sun公司發布的Java應用程序編程接口(Application Programming Interface,API)的重要組成部分,存放于java.util包中。Java平臺的集合框架提供了一個表示和操作對象集合的統一架構,允許用戶獨立地操作各種數據結構而不需要了解具體的實現。Java集合框架包含大量集合接口(Interfaces),具有這些接口的實現類(Implementations)和操作它們的算法(Algorithms)。接口是代表集合的抽象數據類型;實現類是集合接口的具體實現,從本質上講,它們是可重復使用的數據結構;算法是實現集合接口對象里的方法執行的一些有用計算,如搜索和排序。
Java集合框架是一個統一的框架,為了表現和操縱集合,作為Java應用程序中的工具類,為開發人員提供了一個良好的應用程序接口。一個集合就是存儲一組對象的容器,通常將這些對象稱為集合的元素(Element)。Java集合框架支持三種類型集合,分別是集(Set)、線性表(List)和映射(Map)。集(Set)的特點是集合中的對象不按照特定的方式排序,而且對象不允許重復,集本身不能被實例化,但可以作為類型使用。線性表(List)集合中的對象按照索引位置排序,對象可以重復,允許按照對象在集合中的位置檢索對象。映射(Map)集合中存放的每一個元素包含一對鍵值對象,其中鍵對象不能重復,而值對象可以重復。Java集合框架結構如圖1所示。
從Java集合框架圖中可以看出,其定義了6個接口,分別是Collection接口、Iterator迭代接口、List接口、Comparable自定義比較接口、Set接口和Map接口;定義了8個實現類,分別是ArrayList、LinkedList、TreeMap、HashMap、Vector、Stack、HashSet和TreeSet;定義了5個抽象類,分別是AbstractSet、AbstractList、AbstractSequentialList、AbstractCollection、AbstractMap;定義了2個輔助類,分別為Collections和Arrays。Java集合框架具有性能高、編程工作量少、開發成本低,以及較強的通用性、可操作性、可拓展性等優點。
2 接口與實現類
該部分主要分析在本研究中所用到的接口與實現類。
2.1 List接口
在編程中最常用到的是List接口[3]。List接口的重要屬性是對象按次序排列,它保證以某種特定次序來維護元素。List接口繼承并擴展了Collection,即增加了更加豐富的對象管理操作。
List接口繼承了Collection的Iterator( )方法。該方法返回一個Iterator對象,使用它可以對List進行向后遍歷。List還能通過ListIterator( )方法獲取更加強大的迭代器ListIterator,通過ListIterator( )方法可以對List進行向前、向后雙向遍歷對象集,并能在List中進行元素的插入和刪除。List接口的定義如下:public interface List<E>extends Collection<E>。與Collection不同的是,在List接口中大量擴充了Collection接口,擁有比Collection接口中更多的定義方法,其中有些方法較為常用。List接口中的主要方法為:第一,public void add(int index,E element),指定處添加元素;第二,int indexOf(Object o),返回第一個出現元素o的位置。
2.2 ArrayList類
ArrayList類實現了List接口[4],實現了所有可選擇列表操作,并允許包括null在內的所有元素。ArrayList是大小可變的動態數組。每個ArrayList實例都有一個容量,該容量用來存儲列表元素的數組大小,它總是至少等于列表的大小。隨著向ArrayList中不斷添加元素,容器的容量也會自動增加。添加大量元素前應用程序可以使用ensureCapacity操作來增加ArrayList實例的容量,這可以減少遞增式再分配的數量。ArrayList類實現不是同步的,如果多個線程同時訪問一個ArrayList實例,而其中至少一個線程從結構上修改了列表,那么它必須保持外部同步。ArrayList類中的主要方法為:①public ArrayList(),創建一個初始容量為10的空列表;②public Object get(int index),返回此列表中指定的元素;③public Object remove(int index),刪除一個對象;④public Object[] toArray(),將集合變為對象數組,對于一些特定的操作數組會獲得更快的處理。
2.3 LinkedList類
LinkedList類是List接口的鏈接列表實現類。LinkedList類除了實現List接口外,還為在列表開頭和結尾的get、remove和insert元素提供了統一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列或者雙端隊列。LinkedList類的主要方法為:①void addFirst(Object o),將對象o添加到列表的開頭;②void addLast(Object o),將對象o添加到列表的結尾;③Object getFirst(),返回列表開頭的元素;④Object removeFirst(),刪除并且返回列表開頭的元素;⑤set(int index,E element),將此列表中指定位置的元素替換為指定的元素。
ArrayList類和LinkedList類的區別如下。ArrayList類是以可變數組實現完成的List接口,在ArrayList類數據結構中,由于地址連續,一旦存儲好了數據,快速隨機訪問的操作效率較高,但當元素的插入或刪除發生在List中央位置時,ArrayList類需要移動數據,所以效率較低。對ArrayList類而言,建議使用ListIterator來進行向前或者向后遍歷,而不宜采用其來進行元素的插入和刪除,花費的成本遠遠高于LinkedList類。LinkedList類是以雙向鏈表(Double-Linked-List)實現完成的List容器。在LinkedList類數據結構中,地址任意,開辟內存不需要等待連續地址,對插入和刪除元素操作的效率較高,它還提供addFirst、getFirst、getFirst、removeFirst、removeLast等方法,可用于實現棧和隊列的操作。但是因為查詢操作過程中要移動指針,查詢性能較低,所以不適合快速隨機訪問。
3 房源出租信息系統功能模塊設計
房源信息是房屋出租系統的基本模塊。用戶登錄房屋出租系統后可以添加房源信息、修改房源信息、刪除房源信息和查詢房源信息。
添加房源信息是將輸入的房源信息添加到系統中。添加房源之前,首先要根據房源編號查詢該房源信息是否存在,如果已經存在,則需要輸入新的房源編號;如果不存在,則將房源添加至系統中,并顯示添加成功。
修改房源信息功能是除了房源編號外,修改房源部分信息或者全部信息。修改房源信息首先要輸入房源編號查詢房源信息,如果不存在則顯示沒有該房源,否則輸出該房源信息;其次,輸入要修改的房源信息;最后修改房源信息。如果修改成功,則顯示房源信息修改成功,同時顯示新的房源信息。
刪除房源信息功能是根據房源編號刪除指定房源信息。刪除房源信息首先要根據輸入的房源編號查詢房源信息,如果不存在則顯示房源信息不存在,否則顯示房源信息。其次,判斷是否真的刪除,如果取消則退出,如果選擇刪除則刪除房源信息。最后,判斷是否刪除成功,如果成功則顯示房源信息刪除成功,否則提示信息刪除失敗。
查詢房源信息是根據房租價格、房源狀態、小區名稱、房源樓層等條件進行查詢。如果查詢到房源信息,則顯示房源信息,否則,提示沒有找到符合條件的房源信息。
4 修改房源信息流程設計
由于篇幅受限,下面以修改房源信息為例進行相應說明。根據任務分析,利用Microsoft Visio 2010畫圖工具,畫出修改房源信息流程圖,如圖2所示。首先輸入房源編號,根據房源編號查詢房源信息,這時系統會判斷房源信息是否存在,若不存在,則顯示沒有該房源;若存在,則輸入修改的房源信息,并修改房源信息。此時,系統再次判斷房源信息是否修改成功,若修改成功,則顯示修改成功;若修改失敗,則顯示修改失敗。
5 修改房源信息模塊設計與實現
5.1 房源信息實體類(House.java)設計
房源信息實體類包括成員變量和成員兩部分。其中,成員變量有房源編號、小區名稱、物業公司、房屋類型、房屋狀態、房屋朝向、房屋價格、出租價格、房屋設施、房屋評價、建筑年限、房屋棟數、房屋樓層、房屋用途。成員方法是一組set/get屬性方法,方便成員變量初始化,可以通過eclipse中的源碼(s)菜單項中的生成Getter和Setter功能自動生成。部分代碼如下:
public class House {//創建房屋實體類
private String houseId;//房源編號
private String cellName;//小區名稱
private String propertyCompany;//物業公司
private String houseType;//房屋類型
private String houseFloor;//房屋樓層
private String housePrice;//購房價格
private String rentPrice;//出租價格
private String constructYear;//建筑年限
private String houseFacility;//房屋設施
private String houseEvaluate;//房屋評價
public String getHouseId() {//獲取房源編號
return houseId;
}
public void setHouseId(String houseId) {//設置房源編號
this.houseId = houseId;}
}
5.2 房源信息管理接口實現類(HouseDaoImpUseOfArrayList.java)設計
通過房源信息實現類實現接口中所有抽象方法,實現類中的主要代碼如下:
public boolean modifyHouse(String sid,House house){
boolean flag=false;
House originalhouse=this.selectById(sid);//根據Id找房源
if(originalhouse!=null){ //若原有房源不為空
System.out.println("該房源存在,可以修改!");
int index=list.indexOf(originalhouse);//獲取原房源索引
list.set(index,house); //用set方法修改原先的房源信息
flag=true;
}else{
System.out.println("房源不存在,無法修改信息!");
}
return flag;//返回flag的值
}
}
5.3 修改房源信息實現效果
修改房源信息執行過程如圖3所示。
6 結語
房源出租信息系統由添加房源、修改房源、刪除房源、查詢房源4個功能模塊構成。在設計修改房源信息功能模塊的過程中,根據設計的流程圖,使用集合容器中List接口的ArrayList列表存放多個房源信息,通過查詢房源信息編號selectById()、修改房源信息modifyHouse()等方法實現房源信息修改。
參考文獻:
[1]徐秀勤.淺談Java中基于集合的應用類的教學設計[J].電腦知識與技術,2019(27):87-88.
[2]段莎莉.淺談JAVA集合框架及其應用[J].信息技術與信息化,2020(10):104-106.
[3]韓慶安.Java容器類的選擇[J].數碼世界,2019(10):57.
[4]胡建華,鄢旭.基于數據結構與簡化內存模型的Java集合教學方法研究[J].計算機教育,2018(5):30-32.