当前位置: 首页 > news >正文

第十一章 持有对象

一、基本概念

  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

相关文章:

  • 条件变量的接口函数和使用原则
  • C# DataGridView中DataGridViewComboBoxCell列,下拉框事件的处理【完美解决】
  • C# 中的枚举类型 enum (属于值类型)
  • jQuery选择器之表单对象属性过滤选择器Demo
  • Cloudera Mountable HDFS (hadoop-fuse-dfs).
  • linux reiserfs文件系统损坏后的数据恢复过程记录
  • 把一个用户的相关权限赋予另外一个用户
  • gets函数的不安性详解
  • Silverlight知识链接整理(11月-12月)
  • ORACLE 分区与索引
  • C# 视频监控系列(2):客户端——封装API (1)
  • Silverlight书籍推荐阅读排行榜【续】
  • 文本编辑命令
  • VI批量替换
  • Heron and His Triangle 2017 沈阳区域赛
  • [LeetCode] Wiggle Sort
  • canvas绘制圆角头像
  • Docker下部署自己的LNMP工作环境
  • es6要点
  • Java IO学习笔记一
  • Java教程_软件开发基础
  • js正则,这点儿就够用了
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Mysql5.6主从复制
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python语法速览与机器学习开发环境搭建
  • Theano - 导数
  • 高度不固定时垂直居中
  • 给github项目添加CI badge
  • 通过几道题目学习二叉搜索树
  • 一些关于Rust在2019年的思考
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #控制台大学课堂点名问题_课堂随机点名
  • (3)STL算法之搜索
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (ZT)一个美国文科博士的YardLife
  • (阿里云万网)-域名注册购买实名流程
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (一) storm的集群安装与配置
  • (一)UDP基本编程步骤
  • (已解决)什么是vue导航守卫
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)用.Net的File控件上传文件的解决方案
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .gitignore
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 事件模型教程(二)
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .net对接阿里云CSB服务
  • .NET中 MVC 工厂模式浅析
  • ??eclipse的安装配置问题!??