《Java面向对象程序设计》课件-项目5 使用集合_第1页
《Java面向对象程序设计》课件-项目5 使用集合_第2页
《Java面向对象程序设计》课件-项目5 使用集合_第3页
《Java面向对象程序设计》课件-项目5 使用集合_第4页
《Java面向对象程序设计》课件-项目5 使用集合_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5使用集合Java程序设计项目描述

/

Projectdescription本项目通过模拟学生管理系统、模拟用户注册、模拟商超模块购物车三个任务,讲解如何选用合适的集合来存储不同的数据,从而了解List集合、Set集合、Map集合的具体应用。使用List存储数据任务1Java集合概述Java集合类是指Java中设计用于容纳对象的各种数据结构,通常也称为容器类。Java集合框架则是指由Java集合类以及相关操作构成的体系结构,包含接口、接口的实现类和对集合运算的算法,如右图:Collection接口方法描述booleanadd(Objecto)向集合中添加一个元素booleanaddAll(Collectionc)将指定collection中的所有元素都添加到集合中voidclear()移除集合中的所有元素booleanremove(Object

o)在集合中移除指定的元素booleanisEmpty()判断集合是否为空Iterator

iterator()迭代器,用于遍历集合中的元素intsize()集合中成员的个数booleancontains(Objecto)判断集合中是否包含元素oCollection接口是List和Set的父接口,在Collection中定义了通用的一些方法用于操作List和Set集合的增删改查操作。特点:(1)List元素有序且可重复。(2)List可以精确控制元素的插入位置或删除指定位置的元素。List接口方法描述booleanadd(int

index,Object

element)在集合的index处插入元素elementbooleanaddAll(intindex,Collectionc)将指定collection中的所有元素都添加到集合的index处Objectget(intindex)获取集合index处的元素Objectremove(intindex)在集合中移除index处的元素Objectset(intindex,Objectelement)将集合中index处的元素替换成elementIntindexOf(Objecto)返回对象o在集合中的位置索引IntlastIndexOf(Objecto)返回对象o在集合中的最后一次出现的位置索引ListsubList(intfromindex,inttoindex)返回从索引fromindex(包括)到toindex(不包括)处所有元素集合组成的子集合它总是至少等于列表的大小,随着向ArrayList中不断添加元素,其容量也自动增长。ArrayList

集合LinkedList

集合List接口的另一个实现类是LinkedList,该集合内部维护了一个双向循环的链表。方法描述voidaddFirst(Object

o)在集合的开头插入元素ovoidaddLast(Object

o)在集合的插入元素oObjectgetFirst()获取集合第一个元素ObjectgetLast()获取集合最后一个元素ObjectremoveFirst()移除集合中第一个元素ObjectremoveLast()移除集合中最后一个元素ArrayList允许快速访问元素,但是在插入和删除元素时会造成元素大量移动。LinkedList的每一个元素都使用引用的方式来记住它的前后一个元素,从而可以将所有的元素连接起来,添加和删除都只需要改变引用关系。Iterator接口Iterator接口主要用于迭代访问(即遍历)Collection中的元素,又称为迭代器。它仅提供三个方法:hashNext()、next()、remove()。1、当调用集合的iterator()时就会获得一个迭代器对象,该对象指向集合第一个元素的前面;2、通过hasNext()判断集合中是否有下一个元素,如果有就用next()取出该元素,如果没有则说明遍历到了集合的尾部;3、remove()则是用来通过迭代器删除集合中的成员的。Iterator接口需要特别说明的是,当通过迭代器获取ArrayList集合中的元素时,此时这些元素都被当成Object类型,如果想得到特定类型的元素,则需要进行强制类型转换。Iterator接口在使用迭代器Iterator对集合中的元素进行迭代时,如果同时调用了集合对象的add或remove的方法,会出现异常。这个异常出现的原因是集合中删除了元素会导致迭代器预期的迭代次数发生改变,导致迭代器的结果不准确。

解决方式如下:迭代器可以改成专门针对List集合特有的ListIterator,该迭代器本身多了一个add的方法,这样就可以不用集合的add的方法了forEach遍历(1)foreach循环来遍历数组或集合中的元素,语法如下:(2)foreach循环会自动遍历容器中的每个元素,代码如下:任务实施任务分析学生管理系统首页及每个功能的具体要求如下。系统首页:用于显示系统所有的操作,并根据用户在控制台的输入选择需要使用的功能。查询功能:用于选择该功能后,在控制台打印所有学生的信息。添加功能:用户选择该功能后,要求用户在控制台输入学生学号、姓名、年龄和居住地的基本信息。在输入学号时,判断学号是否被占用,如果被占用则添加失败,并给出相应的提示;返之则提示添加成功。删除功能:用户选择该功能后,提示用户在控制台输入需要删除的学生的学号,如果用户输入的学号存在则提示删除成功,返之则提示删除失败。修改功能:用户选择该功能后,提示用户在控制台输入需要删除的学生的学号、姓名、年龄和居住地学生信息,并使用输入的学生学号判断是否有此人,如果有则修改原有的学生信息,反之则提示需要修改的学分信息不存在。退出功能:用户选择该功能后,程序正常关闭。任务实施编写代码详细代码请参考配书代码运行结果使用Set模拟数据任务2Set接口(1)集合框架中的Set指Set接口和所有Set接口的实现类,它们都继承自Collection。其特点是元素无序,不可重复。(2)须要注意的是,加入Set的每个元素都必须是唯一的。Set通过集合中的对象的equals()方法来判断对象的唯一性,所以,加人Set的对象必须重写Object中的equals()方法。

(3)Set常用的实现类有HashSet和TreeSet。HashSet

HashSet用了“专为快速查找而设计”的散列函数hashcode(),通过对象的hashcode()决定存放的位置。添加对象计算哈希值判断重复哈希值相同hashcode()equals()确定位置从代码运行过程来看,当往HashSet中存放重复的”def”元素时,先用HashCode()得到对象的地址,发现这个地址有存放元素时,再用equals()判断是否两个对象值是否相等,如果相等则认为是重复元素,那存放失败,add方法的返回值为false。(1)HashSet(2)上页代码是把String类对象存入HashSet,String类有重写过equals()和hashcode(),所以不能把重复的String对象存入HashSet,但是如果将案例中的Person对象存入HashSet时,结果又如何呢?HashSet(3)现在来改写Person类,假设名字相同并且号码相同的就是同一个学生,Person类添加以下方法:TreeSetTreeSet是一个有序的Set,其底层采用二叉树的原理进行排序,因此放到TreeSet集合中的对象是可以排序的,并用到了集合框架提供的另外两个实用接口Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口;如果需要多个类具有相同的排序算法,那就不需要在每个类分别重复定义相同的排序算法,只要实现Comparator接口即可。TreeSet从运行结果来看,出现ClassCastException类型转换出错,原因是Person类没有实现Comparable接口,从而没有实现比较规则,而TreeSet因为有排序功能,当把一个没有比较规则的对象加入TreeSet集合时就会报错。TreeSet要解决上述问题,让Person类实现Comparable接口,重写compareTo()方法。(1)改写Person类,重写compareTo()方法,比较规则是按name升序排序。(左图)(2)把Person对象放入TreeSet中,可以看到Person对象因为有了比较规则,能存放进TreeSet集合中了,同时也实现了按名字升序排序。(右图)任务实施任务分析模拟用户注册要求用户首先输入用户名、密码、确认密码、生日(格式为yyyy-mm-dd为正确)、手机号(手机长度为11位为正确)、邮箱(包含符号“@”为正确)信息,判断信息正确后,验证用户是否重复、重复则给出相应的提示,如果不重复则注册成功。案例要求使用HashSet集合实现。任务实施编写代码详细代码请参考配书代码运行结果使用Map存储数据任务3Map接口(1)Map接口没有继承自Collection,用于保存具有“映射关系”的“键值对”数据。(2)键是key,值是value,key和value都可以是任何引用类型的数据Map的key不允许重复,即同一个Map对象的任何两个key通过equals()比较的结果总是返回false。(3)Map接口中常用的实现类有HashMap和TreeMap。方法描述voidclear()从该地图中删除所有的映射(可选操作)。booleancontainsKey(Object

key)如果此映射包含指定键的映射,则返回trueSet<Map.Entry<K,V>>entrySet()返回此地图中包含的映射的Set视图V

get(Object

key)返回到指定键所映射的值,或null如果此映射包含该键的映射booleanisEmpty()如果此地图不包含键值映射,则返回trueSet<K>keySet()返回此地图中包含的键的Set视图V

put(K

key,V

value)将指定的值与该映射中的指定键相关联V

remove(Object

key)如果存在(从可选的操作),从该地图中删除一个键的映射Collection<V>values()返回此地图中包含的值的Collection视图HashMapHashMap是Map接口的一个实现类,它底层用哈希表的方式存储键值映射关系,不能出现重复的键。当向Map中存储相同的key时,后添加的值替换掉了前面的值,这也证实了Map中的键必须是唯一的,不能重复。HashMap在程序的开发中,经常需要获取Map中所有的值,有四种方法可以实现:任务实施任务分析本任务开发一个模拟商超购物的购物车程序,主要功能包括:(1) 购物车可以实现商品的购买、删除、修改商品数量和清空购物车的功能,以HashMap的形式存储购物车中的相关数据。(2) 每次购买默认购买的商品

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论