20190110——第十一章 持有对象

如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序

数组是保存一组对象的最有效方式,如果你想保存一组基本类型数据,也推荐使用这个方式。但是数据具有固定的尺寸,而在更一般的情况中,你在写程序时并不知道将需要多少个对象。或者是否需要更复杂的方式来存储对象,因此数组尺寸固定这一限制显得过于受限了。

Java实用类库还提供了一套相当完整的容器类来解决这个问题,其中基本的类型是List、Set、Queue和Map
这些对象也成为集合类,但由于java的类库中使用collection这个名字,来指代该类库的一个特殊子集,所以我使用了更广泛的术语“容器”称呼它们,容器提供了完善的方法来保存对象,你可以使用这些工具来解决数量惊人的问题。

容器还有一些其他特性,例如,Set对于每个值都只保存一个对象,Map是允许你将某些对象与其他一些对象关联起来的关联数组,Java容器类都可以自动调整自己的尺寸,因此,数组不同,在编程的时,你可以将任意数量的对象放置到容器中,并且不需要担心容器应该设置为多大。

当你指定了某个类型作为泛型参数,你并不限制于只能将该确切类型的对象放置到容器中,向上转型也可以像作用于其他类型一样作用于泛型。

因此,你可以将Apple的子类类型,添加到被指定为保存Apple对象的容器中。

基本概念
Java容器类类库的用途是“保存对象”,并将其划分成两个不同的概念。
1)collection 一个独立元素的序列,这些元素都服从一条或者多条规则,List必须按照插入的顺序保存元素,而Set不能有重复的元素,Quene按照排队规则来确定对象产生的顺序(通常与他们被插入的顺序相同)
2)Map。一组成对的键值对对象,允许你使用键来查找值,ArrayList允许你数字来查找值,因此在某种意义上讲,它将数字与对象关联在了一起。映射表允许我们使用另一个对象来查找某个对象,它也被称为关联数组,因为它将某些对象与另外一些对象关联在了一起,或者被称为字典,因为你可以使用键对象来查找值对象,就像字典中使用单词来定义一样,Map是强大的编译工具。

迭代器
任何容器类,都必须有某种方式可以插入元素并将它们再次取回。毕竟,持有事物是容器最基本的工作。
add是插入元素最好的方式,
get是取元素的方式之一
迭代器(也是一种设计模式)的概念可以用于达成此目的。迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列层的结构,此外,迭代器通常被称为轻量级对象:创建它的代价小。因此,经常可以看到对迭代器有奇怪的限制,例如,java的迭代器只能单向移动,
1)使用方法iterator()要求容器返回一个Iterator.Iterator将准备好返回序列的第一个元素,
2)使用next()获得序列中的下一个元素
3)使用hasNext()检查序列中是否还有元素
4)使用remove()将迭代器新近返回的元素删除

ListIterator
ListIterator是一个更强大的Iterator的子类型,它只能用于各种list类的访问,尽管Iterator只能向前移动,但是ListIterator可以双向移动。它还可以产生相对于迭代器在列表中指向的前一个位置和后一个元素的索引。并且可以用set()方法替换它访问过的最后一个元素。

Stack
栈通常是指,后进先出的LIFO的容器,有时候栈也被称为叠加栈,因为最后“压入”栈的元素,第一个“弹出”栈。经常用类比栈的事物是装有弹簧的储放器中的自助餐托盘,最后装入的托盘总是最先拿出来使用的。

set
set不保存重复的元素,如果你试图将相同对象的多个实例添加到set中,那么它就会阻止这种重复现象,set中最常被使用的是测试归属性,你可以很容易地询问某个对象是否在某个set中,正因为如此,查找就成为了set中最重要的操作,因此你通常都会选择一个HashSet的实现,它专门对快查找进行了优化。
set输出的顺序没有任何规律可遵循,这是因为出于速度原因的考虑。HashSet应用了散列,TreeSet将元素存储在红-黑树结构中,而HashSet使用的散列函数。

quene
队列是一个典型的先进先出(FIFO)的容器,

Foreach与迭代器
到目前为止,foreach语法主要用于数组,但是它也可以应用于任何Collection对象。你实际上已经看到过很多使用ArrayList时用到它的事例。

小结
1)数组将数字与对象联系起来,它保存明确类型的对象,查询对象时,不需要对结果做类型转换,它可以是多维的,可以保存基本类型的数据,但是,数组一旦生成,其容量就不能改变。

2)Collection保存单一的元素,而Map保存相关联系的键值对,有了java的泛型,你就可以指定从容器中存放的对象类型,因此你就不会将错误类型的对象放置到容器中,并且在从容器中获取元素的时候,不必进行类型转换,各种collection和Map都可以在你向其中添加更多的元素时,自动调整尺寸,容器不能持有基本类型,但是自动包装机制会仔细的执行基本类型到容器中所持有的包装器类型之间的双向转换。

3)像数组一样,List也建立数字索引与对象的关联,因此, 数组和list都是排序好的容器,List能够自动扩充容量。

4)如果要进行大量的随机访问,就是用ArrayList,如果要经常从表中间插入和删除元素,则应该使用LinkedList

5)各种Queue以及栈的行为,由LinkedList提供支持

6)Map是一种将对象(而非数字)与对象相关联的设计.HashMap设计用来快速访问,而TreeMap保持键始终处于排序状态,所以没有HashMap快,LinkedHashMap保持元素插入的顺序,但是也通过散列提供了快速访问的能力

7)Set不接受重复元素,HashSet提供最快的查询速度,而TreeSet保持元素处于排序状态,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
综合小区管理系统管理系统按照操作主体分为管理员和用户。管理员的功能包括报修管理、车位管理、车位分配管理、出入管理、字典管理、房屋管理、物业费缴纳管理、公告管理、物业人员投诉管理、我的私信管理、物业人员管理、用户管理、管理员管理。用户的功能包括管理部门以及部门岗位信息,管理招聘信息,培训信息,薪资信息等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。 综合小区管理系统管理系统可以提高综合小区管理系统信息管理问题的解决效率,优化综合小区管理系统信息处理流程,保证综合小区管理系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理综合小区管理系统信息,包括出入管理,报修管理,报修管理,物业费缴纳等,可以管理操作员。 出入管理界面,管理员在出入管理界面中可以对界面中显示,可以对招聘信息的招聘状态进行查看,可以添加新的招聘信息等。报修管理界面,管理员在报修管理界面中查看奖罚种类信息,奖罚描述信息,新增奖惩信息等。车位管理界面,管理员在车位管理界面中新增。公告管理界面,管理员在公告管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值