博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十一章 持有对象
阅读量:5928 次
发布时间:2019-06-19

本文共 2595 字,大约阅读时间需要 8 分钟。

一、基本概念

  Java 容器类类库的用途是“保存对象”,并将其划分为两个不同的概念:

    1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象生产的顺序(通常与它们被插入的顺序相同)。

    2)Map。一组成对的“键值对”对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此在莫中意义上讲,它将数字与对象关联在了一起。映射表允许我们使用另一个对象来查找某个对象,它被称为“关联数组”,因为它将某些对象与另外一些对象关联在一起;或者被称之为“字典”,因为你可以使用键对象来查找值对象,就像在字典中使用单词来定义一个List一样。

  Collection接口概括了序列的概念————一种存放一组对象的方式。

二、添加一组元素

  Arrays:Arrays.asList(一个数组或者一个用逗号分隔的元素列),转换为一个list对象

  Collections:Collections.addAll(一个数组或者一个用逗号分隔的元素列或者一个collection对象);

  Collection:Collection.addAll(一个collection对象),速度快首选。

  注意:Arrays.asList()转换为List,其底层表示的是数组,因此不能调整尺寸,这时add与delete操作不支持。会报错

Arrays.asList():会判断所传数组或者参数列中的最小归集(如果List所接受的类型范围大于最小归集会报错,但是也可以现实的说明类型arrays.<类型>asList()),Collections.addAll()则不会。

三、容器的打印

  Arrays.toString()打印数组,但是打印容器无需任何帮助。

四、迭代器

  迭代器(也是一种设计模式)的概念可以用于达成对集合的取值、删除,迭代器是一个对象,他的工作是遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为轻量级对象:创建它的代价很小。

  Java的Iterator只能单向移动,这个Iterator只能用来:

    1)使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。

    2)使用next()获得序列中的下一个元素。

    3)使用hasNext()判断序列是否还有元素

    4)使用remove()将迭代器新返回的元素删除。

 

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

五、LinkedList

  执行插入和移除时比ArrayList更高效,但是随即访问要逊色于ArrayList。

  LinkedList还添加了可以使其用作栈、队列或双端队列的方法。

六、Stack

  “栈”通常指“后进先出”(LIFO)的容器。有时栈也被称为叠加栈。

七、Set

  Set不保存重复的元素,保存元素是无序的。Set中查找是非常高效的。HashSet专门对查找做了优化(使用了散列)。

  Set具有和collection完全一样的接口,实际上Set就是collection,只是行为不同。Set是基于对象的值来确定归属性的。

八、Map

  将对象映射到其他对象的能力是一种解决编程问题的杀手锏。

九、Queue

  队列是一个典型的先进先出(FIFO)的容器。即放入顺序与取出顺序是一致的。

  collection与Iterator

    Collection是描述所有序列容器的共性的根接口。

    生成Iterator是将队列与消费队列的方法连接在一起耦合度最小的方式。

  Foreach与迭代器

    可以用于数组喝容器对象。之所以能工作是因为Java5引入新的呗称为Iterable接口,该接口被Foreach用来在序列中移动。

    如果你创建了任何实现Iterable的类,都适用于Foreach,

    foreach语句可以用于数组或其他任何Iterable,但这并不意味着数组肯定也是一个Iterable,而任何自动包装也不会自动发生。

总结:

  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保持元素处于排序状态。LinkedHashSet以插入顺序保存元素。

  8)新程序中不应该使用过多的Vector、HashTable和Stack。

容器分类图(不包含抽象对象与历史遗留构件):

 

 

转载于:https://www.cnblogs.com/jswang/p/7826100.html

你可能感兴趣的文章
“爱思助手”曝为iOS木马:可绕过苹果DRM机制
查看>>
“威胁情报”在手,反黑客终于有地图了!
查看>>
从零开始来看一下Java泛型的设计
查看>>
互联网打响云上争夺战:从计算到生态
查看>>
如何使用CPU来加速你的Linux命令
查看>>
多云战略:企业如何精益求精?
查看>>
12款白帽子用于黑客渗透测试的操作系统
查看>>
大数据对六大领域的挑战
查看>>
思科为其核心网络业务增加了订阅服务
查看>>
社交背水一战?校园日记背后,支付宝野心你真能懂?
查看>>
《企业级ios应用开发实战》一导读
查看>>
嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了
查看>>
Facebook为Messenger应用添加群组付款功能
查看>>
物联网离风口还差最关键一环?
查看>>
如何评价国内SRC纷纷上线“白帽子协议”?
查看>>
这些Intel Atom处理器千万别升Windows 10创意者更新:不兼容
查看>>
免费都不管用,Win10升级在中国怎么就这么难?
查看>>
AI+时代,谈谈产品经理对图像识别技术的阈值控制
查看>>
运营商在万物互联扮演什么角色?上海联通NB-IoT奠定基础
查看>>
机器学习模型开发必读:开源数据库最全盘点
查看>>