文章迁移(一)

数组是存储数据的容器,通常这些数据都是基本数据类型或String类型的,在对对象进行操作的时候显得力不从心,集合(Collection)的出现解决了这一问题,因为集合就是用来存储对象的容器。数据有很多用对象存,对象有很多用集合存,说白了我这里边啥都能存(当然这也不全是好事,后面会说到弊端及解决办法)!

集合的特点:1.用于存储对象的容器;2.集合的长度是可变的(数组新建的同时长度就指定死了);3.集合不能存储基本数据类型的值(指定泛型为基本数据类型的包装类,然后利用自动装箱的原理依然可以存储基本数据类型的值。泛型稍后会说到)。

集合体系:Collection其实就是集合体系中的顶层,这个所谓顶层就是定义体系中所有共性内容的接口(也称之为根接口),什么List什么Set都是这家伙的小弟(子接口)。这个根接口拥有众多子接口,JDK不提供任何Collection的直接实现类,只提供更具体的子接口的实现类(这里我们可以利用多态原理来定义一个Collection的对象—-父类引用指向子类对象)。这些子接口中应用比较广泛的的就是List和Set,稍后重点会说。为了便于理解,这里先把集合框架的层级结构图贴上。这里面的每个构成元素后续都会详细说明。第五篇:集合框架之Collection和迭代器

这个所谓根接口Collection中都定义了些什么共性的内容呢?一个容器就是用来装东西的,那我们首先想到的就是如何添加(add)元素(这里的元素就是对象),接着就是对容器中的元素进行删除(clear慎用,remove返回值是boolean),再往下我们会想到取出容器中的单个元素,进行其他更具体地操作。这些共性的方法不一一说明了,下载一个JDK1.6或者1.7的帮助手册,在java.util包中的接口下的第一个就是Collection,啥都有了。这里要说明一点,首先观念很重要,要把查阅API并快速锁定自己想要查询的方法视为一种很重要的能力去掌握;其次就是老生常谈的重复性练习,没有人生下来就会跑,通往熟练地道路只有不断地熟悉和不断地练习,当然还需要一些小小的技巧(查阅API,一看返回值类型,二看参数列表,三看方法名);最后养成一种习惯—-没事就翻阅各种API文档的习惯。接下来主要介绍这些方法中的获取迭代器的方法(iterator方法)——取出集合中元素的方式。

首先迭代器是个什么东西呢?其实就是取出集合中元素的一种工具,就像开瓶器专门开启酒瓶瓶盖、打火机专门用来取火一样,它们都是一种工具,只不过迭代器是一个专业术语(类似的,稍后我们还会说道比较器Comparator,另外格式化Date对象的时候我们还会用到格式器DateFormat  ),离我们现实生活比较遥远而已。而对于不同的集合其迭代器也不一样,正如我们现实生活中开启啤酒和葡萄酒的开瓶器之不同一样,Collection下面的小弟都有自己的迭代器,将这些迭代器的共性内容再向上抽取就成了迭代器接口——Iterator接口,这些共性内容具体地说就只有三个方法——boolean(返回值代表是否仍有元素可以迭代)  hasNext()(还有下一个元素吗?)、E(代表下一个元素)  next()(获取下一个元素)和void  remove().

那这个迭代器(接口)如何获取呢?细心的哥们儿在看JDK文档时会发现,Collection有一个父接口——Iterable,这个单词跟Iterator很像,它们有什么关系呢?Iterable接口在集合体系中是一个超级接口,Collection及其子接口以及子接口的实现类都继承了这个超级接口,而这个超级接口只有一个抽象方法,就是iterator方法,这个方法就是我们前面说过的获取迭代器的方法,而Collection类型的容器都要覆盖这个获取迭代器的方法——iterator(),这是Collection容器和Map(映射)集合的重要区别。

现在让我们理顺一下思路:Iterator相当于一个迭代器的类,它定义了Collection类型容器的迭代器的共性内容,而这些内容需要根据不同的容器来特定的实现,所以它只对外提供接口,并不能直接实例化,从一个类中获取对象需要new,那么从迭代器接口中获取一个迭代器对象就需要implements.在操作一个容器时,显然最好是拿到迭代器对象,而不是容器直接实现迭代器接口的方法(这就是Collection类型容器都是extends了Iterable,而不是直接实现Iterator接口的原因),所以JDK很贴心的为我们提供了一个Iterable超级接口,这个超级接口有且只有一个抽象方法iterator(),这个方法的返回值就是Iterator,可以用来创建特定的迭代器对象,如果看具体的Collection实现类(比如ArrayList)的源码可以发现,iterator()的实现原理仅仅是return了一个new出来的迭代器对象,这个迭代器对象对应的类是一个定义在实现类内部的实现了Iterator接口的内部类。这样我们就可以利用这个迭代器对象来获取集合中的元素了,多说无益直接上图:

第五篇:集合框架之Collection和迭代器

转载于:https://www.cnblogs.com/padaleideleizi/p/8057872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值