吳飛燕
摘 要:在Java面向?qū)ο蟪绦蛟O(shè)計中,創(chuàng)建數(shù)組時必須指明數(shù)組的長度,且長度固定、不能改變,同一個數(shù)組只能存放同一種數(shù)據(jù)類型的數(shù)據(jù)。然而,在實際情況下,數(shù)據(jù)的個數(shù)和類型需要根據(jù)實際情況進(jìn)行相應(yīng)的調(diào)整的。為此,提出選擇Java中合適的集合容器List接口、ArrayList實現(xiàn)類來設(shè)計并實現(xiàn)房源出租信息系統(tǒng)。實踐表明,該方法可以提高開發(fā)效率。
關(guān)鍵詞:Java集合框架;List接口;ArrayList類;房源出租
中圖分類號:TP311.13 文獻(xiàn)標(biāo)識碼: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),是一種將多個元素聚合起來組成一個單元的對象。它常常用來儲存、檢索、操作聚合的數(shù)據(jù)。集合與數(shù)組的區(qū)別有以下3點:①長度區(qū)別,數(shù)組的長度固定,不可更改,而集合長度可變,在保證不超出內(nèi)存的前提下,可以隨時添加和刪除元素;②內(nèi)容區(qū)別,數(shù)組可以存放基本類型數(shù)據(jù)和引用類型數(shù)據(jù),集合只能存放引用類型數(shù)據(jù);③元素內(nèi)容區(qū)別,數(shù)組只能存儲同一種類型的數(shù)據(jù),而集合可以存儲不同類型的數(shù)據(jù)。
1 Java集合框架
Java集合框架[2](Java Collections Framework)是Sun公司發(fā)布的Java應(yīng)用程序編程接口(Application Programming Interface,API)的重要組成部分,存放于java.util包中。Java平臺的集合框架提供了一個表示和操作對象集合的統(tǒng)一架構(gòu),允許用戶獨立地操作各種數(shù)據(jù)結(jié)構(gòu)而不需要了解具體的實現(xiàn)。Java集合框架包含大量集合接口(Interfaces),具有這些接口的實現(xiàn)類(Implementations)和操作它們的算法(Algorithms)。接口是代表集合的抽象數(shù)據(jù)類型;實現(xiàn)類是集合接口的具體實現(xiàn),從本質(zhì)上講,它們是可重復(fù)使用的數(shù)據(jù)結(jié)構(gòu);算法是實現(xiàn)集合接口對象里的方法執(zhí)行的一些有用計算,如搜索和排序。
Java集合框架是一個統(tǒng)一的框架,為了表現(xiàn)和操縱集合,作為Java應(yīng)用程序中的工具類,為開發(fā)人員提供了一個良好的應(yīng)用程序接口。一個集合就是存儲一組對象的容器,通常將這些對象稱為集合的元素(Element)。Java集合框架支持三種類型集合,分別是集(Set)、線性表(List)和映射(Map)。集(Set)的特點是集合中的對象不按照特定的方式排序,而且對象不允許重復(fù),集本身不能被實例化,但可以作為類型使用。線性表(List)集合中的對象按照索引位置排序,對象可以重復(fù),允許按照對象在集合中的位置檢索對象。映射(Map)集合中存放的每一個元素包含一對鍵值對象,其中鍵對象不能重復(fù),而值對象可以重復(fù)。Java集合框架結(jié)構(gòu)如圖1所示。
從Java集合框架圖中可以看出,其定義了6個接口,分別是Collection接口、Iterator迭代接口、List接口、Comparable自定義比較接口、Set接口和Map接口;定義了8個實現(xiàn)類,分別是ArrayList、LinkedList、TreeMap、HashMap、Vector、Stack、HashSet和TreeSet;定義了5個抽象類,分別是AbstractSet、AbstractList、AbstractSequentialList、AbstractCollection、AbstractMap;定義了2個輔助類,分別為Collections和Arrays。Java集合框架具有性能高、編程工作量少、開發(fā)成本低,以及較強的通用性、可操作性、可拓展性等優(yōu)點。
2 接口與實現(xiàn)類
該部分主要分析在本研究中所用到的接口與實現(xiàn)類。
2.1 List接口
在編程中最常用到的是List接口[3]。List接口的重要屬性是對象按次序排列,它保證以某種特定次序來維護(hù)元素。List接口繼承并擴展了Collection,即增加了更加豐富的對象管理操作。
List接口繼承了Collection的Iterator( )方法。該方法返回一個Iterator對象,使用它可以對List進(jìn)行向后遍歷。List還能通過ListIterator( )方法獲取更加強大的迭代器ListIterator,通過ListIterator( )方法可以對List進(jìn)行向前、向后雙向遍歷對象集,并能在List中進(jìn)行元素的插入和刪除。List接口的定義如下:public interface List<E>extends Collection<E>。與Collection不同的是,在List接口中大量擴充了Collection接口,擁有比Collection接口中更多的定義方法,其中有些方法較為常用。List接口中的主要方法為:第一,public void add(int index,E element),指定處添加元素;第二,int indexOf(Object o),返回第一個出現(xiàn)元素o的位置。
2.2 ArrayList類
ArrayList類實現(xiàn)了List接口[4],實現(xiàn)了所有可選擇列表操作,并允許包括null在內(nèi)的所有元素。ArrayList是大小可變的動態(tài)數(shù)組。每個ArrayList實例都有一個容量,該容量用來存儲列表元素的數(shù)組大小,它總是至少等于列表的大小。隨著向ArrayList中不斷添加元素,容器的容量也會自動增加。添加大量元素前應(yīng)用程序可以使用ensureCapacity操作來增加ArrayList實例的容量,這可以減少遞增式再分配的數(shù)量。ArrayList類實現(xiàn)不是同步的,如果多個線程同時訪問一個ArrayList實例,而其中至少一個線程從結(jié)構(gòu)上修改了列表,那么它必須保持外部同步。ArrayList類中的主要方法為:①public ArrayList(),創(chuàng)建一個初始容量為10的空列表;②public Object get(int index),返回此列表中指定的元素;③public Object remove(int index),刪除一個對象;④public Object[] toArray(),將集合變?yōu)閷ο髷?shù)組,對于一些特定的操作數(shù)組會獲得更快的處理。
2.3 LinkedList類
LinkedList類是List接口的鏈接列表實現(xiàn)類。LinkedList類除了實現(xiàn)List接口外,還為在列表開頭和結(jié)尾的get、remove和insert元素提供了統(tǒng)一的命名方法。這些操作允許將鏈接列表用作堆棧、隊列或者雙端隊列。LinkedList類的主要方法為:①void addFirst(Object o),將對象o添加到列表的開頭;②void addLast(Object o),將對象o添加到列表的結(jié)尾;③Object getFirst(),返回列表開頭的元素;④Object removeFirst(),刪除并且返回列表開頭的元素;⑤set(int index,E element),將此列表中指定位置的元素替換為指定的元素。
ArrayList類和LinkedList類的區(qū)別如下。ArrayList類是以可變數(shù)組實現(xiàn)完成的List接口,在ArrayList類數(shù)據(jù)結(jié)構(gòu)中,由于地址連續(xù),一旦存儲好了數(shù)據(jù),快速隨機訪問的操作效率較高,但當(dāng)元素的插入或刪除發(fā)生在List中央位置時,ArrayList類需要移動數(shù)據(jù),所以效率較低。對ArrayList類而言,建議使用ListIterator來進(jìn)行向前或者向后遍歷,而不宜采用其來進(jìn)行元素的插入和刪除,花費的成本遠(yuǎn)遠(yuǎn)高于LinkedList類。LinkedList類是以雙向鏈表(Double-Linked-List)實現(xiàn)完成的List容器。在LinkedList類數(shù)據(jù)結(jié)構(gòu)中,地址任意,開辟內(nèi)存不需要等待連續(xù)地址,對插入和刪除元素操作的效率較高,它還提供addFirst、getFirst、getFirst、removeFirst、removeLast等方法,可用于實現(xiàn)棧和隊列的操作。但是因為查詢操作過程中要移動指針,查詢性能較低,所以不適合快速隨機訪問。
3 房源出租信息系統(tǒng)功能模塊設(shè)計
房源信息是房屋出租系統(tǒng)的基本模塊。用戶登錄房屋出租系統(tǒng)后可以添加房源信息、修改房源信息、刪除房源信息和查詢房源信息。
添加房源信息是將輸入的房源信息添加到系統(tǒng)中。添加房源之前,首先要根據(jù)房源編號查詢該房源信息是否存在,如果已經(jīng)存在,則需要輸入新的房源編號;如果不存在,則將房源添加至系統(tǒng)中,并顯示添加成功。
修改房源信息功能是除了房源編號外,修改房源部分信息或者全部信息。修改房源信息首先要輸入房源編號查詢房源信息,如果不存在則顯示沒有該房源,否則輸出該房源信息;其次,輸入要修改的房源信息;最后修改房源信息。如果修改成功,則顯示房源信息修改成功,同時顯示新的房源信息。
刪除房源信息功能是根據(jù)房源編號刪除指定房源信息。刪除房源信息首先要根據(jù)輸入的房源編號查詢房源信息,如果不存在則顯示房源信息不存在,否則顯示房源信息。其次,判斷是否真的刪除,如果取消則退出,如果選擇刪除則刪除房源信息。最后,判斷是否刪除成功,如果成功則顯示房源信息刪除成功,否則提示信息刪除失敗。
查詢房源信息是根據(jù)房租價格、房源狀態(tài)、小區(qū)名稱、房源樓層等條件進(jìn)行查詢。如果查詢到房源信息,則顯示房源信息,否則,提示沒有找到符合條件的房源信息。
4 修改房源信息流程設(shè)計
由于篇幅受限,下面以修改房源信息為例進(jìn)行相應(yīng)說明。根據(jù)任務(wù)分析,利用Microsoft Visio 2010畫圖工具,畫出修改房源信息流程圖,如圖2所示。首先輸入房源編號,根據(jù)房源編號查詢房源信息,這時系統(tǒng)會判斷房源信息是否存在,若不存在,則顯示沒有該房源;若存在,則輸入修改的房源信息,并修改房源信息。此時,系統(tǒng)再次判斷房源信息是否修改成功,若修改成功,則顯示修改成功;若修改失敗,則顯示修改失敗。
5 修改房源信息模塊設(shè)計與實現(xiàn)
5.1 房源信息實體類(House.java)設(shè)計
房源信息實體類包括成員變量和成員兩部分。其中,成員變量有房源編號、小區(qū)名稱、物業(yè)公司、房屋類型、房屋狀態(tài)、房屋朝向、房屋價格、出租價格、房屋設(shè)施、房屋評價、建筑年限、房屋棟數(shù)、房屋樓層、房屋用途。成員方法是一組set/get屬性方法,方便成員變量初始化,可以通過eclipse中的源碼(s)菜單項中的生成Getter和Setter功能自動生成。部分代碼如下:
public class House {//創(chuàng)建房屋實體類
private String houseId;//房源編號
private String cellName;//小區(qū)名稱
private String propertyCompany;//物業(yè)公司
private String houseType;//房屋類型
private String houseFloor;//房屋樓層
private String housePrice;//購房價格
private String rentPrice;//出租價格
private String constructYear;//建筑年限
private String houseFacility;//房屋設(shè)施
private String houseEvaluate;//房屋評價
public String getHouseId() {//獲取房源編號
return houseId;
}
public void setHouseId(String houseId) {//設(shè)置房源編號
this.houseId = houseId;}
}
5.2 房源信息管理接口實現(xiàn)類(HouseDaoImpUseOfArrayList.java)設(shè)計
通過房源信息實現(xiàn)類實現(xiàn)接口中所有抽象方法,實現(xiàn)類中的主要代碼如下:
public boolean modifyHouse(String sid,House house){
boolean flag=false;
House originalhouse=this.selectById(sid);//根據(jù)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 修改房源信息實現(xiàn)效果
修改房源信息執(zhí)行過程如圖3所示。
6 結(jié)語
房源出租信息系統(tǒng)由添加房源、修改房源、刪除房源、查詢房源4個功能模塊構(gòu)成。在設(shè)計修改房源信息功能模塊的過程中,根據(jù)設(shè)計的流程圖,使用集合容器中List接口的ArrayList列表存放多個房源信息,通過查詢房源信息編號selectById()、修改房源信息modifyHouse()等方法實現(xiàn)房源信息修改。
參考文獻(xiàn):
[1]徐秀勤.淺談Java中基于集合的應(yīng)用類的教學(xué)設(shè)計[J].電腦知識與技術(shù),2019(27):87-88.
[2]段莎莉.淺談JAVA集合框架及其應(yīng)用[J].信息技術(shù)與信息化,2020(10):104-106.
[3]韓慶安.Java容器類的選擇[J].數(shù)碼世界,2019(10):57.
[4]胡建華,鄢旭.基于數(shù)據(jù)結(jié)構(gòu)與簡化內(nèi)存模型的Java集合教學(xué)方法研究[J].計算機教育,2018(5):30-32.