吴飞燕
摘 要:在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.