前言:凡是使用 Java 编程的,几乎肯定会用到集合框架,比如 ArrayList、LinkedList、HashSet、HashMap 等,集合框架的代码绝对是大师级的实现,所以为了更好地使用集合框架,我们有必要系统地学习下集合框架的内容。

一、接口综述

  集合框架的整体结构图如下(摘自《Thinking In Java》):

  

  上图也许有些复杂,因为包含了很多我们很少用到的抽象类,其实,只需要记住下面两张图即可(摘自张龙的 collection 集合教程):

  

  

  Collection 接口里定义了如下操作集合元素的方法:

  • boolean add(Object o):用于向集合里添加一个元素,如果集合对象被添加操作确实改变了,则返回 true。
  • boolean addAll(Collection c):把集合 c 里的所有元素添加到指定集合里,如果集合对象被添加操作改变了,则返回 true。
  • void clear():清除集合里的所有元素,将集合长度变为 0.
  • boolean contain(Object o):判断集合里是否包含指定元素,包含则返回 true。
  • boolean containAll(Collection c):判断集合里是否包含集合 c 里的所有元素。
  • boolean isEmpty():判断集合是否为空,当集合长度为 0 时返回 true。
  • Iterator iterator():返回一个 Iterator 对象,用于遍历集合里的元素。
  • boolean remove(Object o):删除集合中指定的元素 o,当集合里包含了一个或多个元素 o 时,这些元素将被删除,该方法返回 true。
  • boolean removeAll(Collection c):从集合中删除集合 c 里面包含的所有元素,如果删除了一个或多个元素,则返回 true。
  • boolean retainAll(Collection c):从集合中删除集合 c 里不包含的元素,如果删除了一个或多个元素,则返回 true。
  • int size():该方法返回集合里的元素的个数
  • Object[] toArray():该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。

  Iterator 接口也是 Java 集合框架的成员,但它与 Collection 系列、Map 系列的集合不一样:Collection 系列集合、Map 系列集合主要用于盛装其他对象,而 Iterator 则主要用于遍历(即迭代访问)Collection 集合中的元素,Iterator 对象也被称为迭代器。

  Iterator 接口包含 3 个方法:

 public interface Iterator<E>{
   E next();      // 返回集合里的下一个元素
   boolean hasNext(); // 如果被迭代的集合元素还没有被遍历,则返回 true
   void remove();     // 删除集合里上一次 next 方法返回的元素
 }

  通过反复调用 next 方法,可以逐个访问集合中的每个元素。但是,如果到达了集合的末尾,next 方法将抛出一个 NoSuchElementException。因此,需要在调用 next 之前调用 hasNext 方法。如果迭代器对象还有多个供访问的元素,则返回 true。如果想要查看集合中的所有元素,就请求一个迭代器,并在 hasNext 返回 true 时反复地调用 next 方法。例如:

Collection<String> c = ...;
Iterator<String> iter  = c.iterator();
while (iter.hasNext()) {
    String element = iter.next();
    do something element
}

  不过,从 Java SE 5.0 起,这个循环可以采用一种更加优雅的缩写方式。用 "for each" 循环可以更加简练地表达同样的循环操作:

for (String element : c) {
    do something else
}

  PS:编程老手会注意到:Iterator 接口的 next 和 hasNext 方法与 Enumeration 接口的 nextElement 和 hasElement 方法的作用一样,但是可能是 Java 集合类库的设计者觉得这个方法名太长,于是引入了具有较短方法的新接口。

  注意:这里还有个有用的类推。可以将 Iterator.next 与 InputStream.read 看作为等效的。从数据流中读取一个字节,就会自动地 "消耗掉" 这个字节。下一个调用 read 将会消耗并返回输入的下一个字节,用同样的方式,反复地调用 next 就可以读取集合中所有元素。

  Iterator 接口的 remove 方法要和 next 方法一起使用,如果调用 remove 之前没有调用 next 是不合法的,会抛出一个 IllegalStateException 异常。

  如果想删除相邻的两个元素,需要这样:

it.next();
it.remove();
it.next();
it.remove();

  将接口是空洞的,因为没有具体的精彩的实现,所有接下来还是具体介绍 集合框架中的几个常用的实现类:

  

Java 集合框架(一)—— 接口综述的更多相关文章

  1. Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  2. Java集合框架——List接口

    第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 L ...

  3. Java集合框架之接口Collection源码分析

    本文我们主要学习Java集合框架的根接口Collection,通过本文我们可以进一步了解Collection的属性及提供的方法.在介绍Collection接口之前我们不得不先学习一下Iterable, ...

  4. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

  5. Java集合框架顶层接口collectiion接口

    如何使用迭代器 通常情况下,你会希望遍历一个集合中的元素.例如,显示集合中的每个元素. 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合 ...

  6. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  7. JAVA集合框架 - Map接口

    Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...

  8. Java集合框架的接口和类层次关系结构图

    Collection和Collections的区别 首先要说的是,"Collection" 和 "Collections"是两个不同的概念: 如下图所示,&qu ...

  9. Java集合框架之接口Iterator

    简述 Iterator迭代器的定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义是,提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象 ...

  10. Lambda表达式和Java集合框架

    本文github地址 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了java.util. ...

随机推荐

  1. Html隐藏占空间与隐藏不占空间

    隐藏不占用空间: display:none; 以下为示例代码: <span style="display:none;"> 获取中</span> 隐藏占用空间 ...

  2. PYQT5实现文件目录浏览

    def setBrowerPath(self): download_path = QtWidgets.QFileDialog.getExistingDirectory(self, "浏览&q ...

  3. 廖雪峰Python学习笔记——使用元类

    元类(MetaClasses) 元类提供了一个改变Python类行为的有效方式. 元类的定义是“一个类的类”.任何实例是它自己的类都是元类. class demo(object): pass obj ...

  4. Mac OS 10.12 - 在VMwear Workstation12.5.2中大写键和中英文输入法的切换!

    大小写切换: Alt+CapsLock(不过必须在英文状态下)!! 输入法切换: CapsLock进行中英文输入法的切换

  5. 对表单控制是否提交 需要在方法名前面加上 return

  6. 根据已有的Jar包 一键生成对应的mavenpom.xml信息

    根据已有的jar包信息一键生成对应的maven坐标信息 .想一个问题 假如 我有一个SSH的项目, jar包是配置在lib中, 我现在想把它做成maven格式的SSH项目  ,那么这些jar包在mav ...

  7. Servlet实现session读写

    前言     一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有 ...

  8. 五,session数据写入memcached

    1,session数据通常保存在服务器端的文件中,它的默认过期时间是1440s.我们可以将session数据保存到memcached中,设定memcached的过期时间大于session过期时间即可. ...

  9. 从getwebshell到绕过安全狗云锁提权再到利用matasploit进服务器

    本文作者:i春秋签约作家——酷帥王子 一. 利用getwebshell篇 首先对目标站进行扫描,发现是asp的,直接扫出网站后台和默认数据库,下载解密登陆如图: 下面进后台发现有fckeditor,而 ...

  10. JAVA抽象类和抽象方法(abstract)

    一.抽象(abstract)的使用 当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. 我们都知道,父类是将子类所共同拥有的属性和 ...