集合体系之集合顶层类Collection与其迭代器知识

集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存储多个对象,就不能是一个基本变量,而应该是一个容器类型的变量,在容器以前的内容中,只有数组和StringBuffer是容器类型。但StringBuffer的结果是一个字符串。故只能使用数组,即对象数组。但对象数组因为长度固定,不能适应变化的需求。所以Java提供集合类。

集合与数组的区别

1.集合的长度可变,而数组长度固定。

2.数组存储了一类元素,集合可以存储不同类型的元素。

3.数组即可存储基本类型数据,又可存储引用类型数据。但集合只能存储引用类型。

Colection(接口)

集合的顶层接口,其子体系有重复的,有唯一的,有无序的,有有序的。

主要子接口有两个:

​|–List

​有序(存储与取出顺序不一致),可重复。

​|–Set

​无序(存储顺序与取出顺序不一致,但它有内在的存储顺序该顺序通过哈希表生成,有时在输入时可能与其内在顺序相同,但之并不代表其有序,多输入几个数据就会发现其无序性),唯一。

Collection的功能概述

添加功能

boolean add(E e):添加一个元素

boolean addAll(Collection extends E> c):添加一个集合的元素

删除功能

void clear():移除所有元素

boolean remove(Object o):collection 中移除指定元素的单个实例

boolean removeAll(Collection> c):移除一个集合的对象(只要有一个被移除就返回true)

判断功能

boolean contains(Object o):判断集合是否包含指定元素

boolean containsAll(Collection> c);判断集合是否包含指定的集合元素(包含所有才叫包含)

boolean isEmpty():判断集合是否为空

获取功能

Iterator iterator():生成一个迭代器对象,从而迭代访问每个元素

长度功能

int size():元素个数

交集功能

boolean retainAll(Collection> c):删除集合中,在c集合中不存在的元素

解释:假定有A,B两个集合

A,B做交集,最终结果存放在A中,B不变

返回值表示A是否发生变化。

把集合转换为数组

toArray

Object[] toArray()

Iterator(接口)

对 collection 进行迭代的迭代器。

是遍历集合的一种方式,迭代器依赖于集合存在

迭代器定义为接口的原因:

​假定迭代器是一个类,那么我们就可以创建该类对象并调用方法来实现集合的遍历,但是Java中有许多的集合类,而这些集合类的数据结构不同,所以存储和遍历的方式是不同的。进而它们的遍历方式不同,所以没有定义迭代器类。

​而无论是哪种集合,都具备获取元素的操作,而且最好在辅助于判断功能,这样在获取前,先判断就不容易出错,所以判断功能和获取功能应该是一个集合遍历所具备的,而每种集合的遍历方式不同。所以就把两种功能提取出来,而不提供具体实现,这就是迭代器声明为接口的原因。

​迭代器真正的实现类在具体的子类中,以内部类的方式实现。

因为Collection类实现了Iterable而Iterable中

hasNext

boolean hasNext():如果仍有元素可以迭代,则返回 true。

(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。

next

E next():返回迭代的下一个元素。

remove

void remove():从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器

所指向的 collection,则迭代器的行为是不确定的。

抛出:

UnsupportedOperationException - 如果迭代器不支持 remove 操作。

IllegalStateException - 如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经

调用了 remove 方法。

迭代器使用的两种方式

while

通过迭代器的hasNext()和next()方法实现

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class t3 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("hello");

c.add("world");

c.add("java");

Iterator it = c.iterator();

while (it.hasNext()){

String s = it.next();

System.out.println(s);

}

}

}

out:

hello

world

java

增强for循环

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class t3 {

public static void main(String[] args) {

Collection c = new ArrayList();

c.add("hello");

c.add("world");

c.add("java");

for (String s:c){

System.out.println(s);

}

}

}

out:

hello

world

java

二者作用相同

java 顶层类_Javase之集合体系之(1)集合顶层类Collection与其迭代器知识相关推荐

  1. Scala集合体系:可变集合和不可变集合

    不可变集合继承关系图 可变集合继承关系图

  2. Java进阶(七)Set系列集合、Map集合体系

    七.Set系列集合.Map集合体系 需要学会什么? Set系列集合的特点:Set系列集合的特点和底层原理. 集合工具类Collections:快速的对集合进行元素的添加.排序等操作. 综合案例:把Co ...

  3. Scala的集合体系

    首先看一下整个集合体系结构,这个结构与Java的集合体系非常相似 集合的顶层接口是Iterable,Iterable接口下面还有一些子接口, Set.Seq.Map 这几个子接口下面有具体的实现类 s ...

  4. Java集合(一)集合框架概述

    文章目录 一.集合框架 1.1 常用的集合 1.2 线程安全的集合 1.3 "fail-fast"机制 1.3.1 "fail-fast"机制是什么 1.3.2 ...

  5. 认知智能类脑模型之认知体系简介

    认知层在逻辑层的下层,在理解层的上层.系统的理解之后,才能形成 系统化的认知体系.在类脑能力上来说,系统化的认知建立在系统化的理解之上.认知的三大体系认知维度,类脑模型,万维图谱,三大技术体系共同支撑 ...

  6. java集合框架容器 java框架层级 继承图结构 集合框架的抽象类 集合框架主要实现类...

    本文关键词: java集合框架  框架设计理念  容器 继承层级结构 继承图 集合框架中的抽象类  主要的实现类 实现类特性   集合框架分类 集合框架并发包 并发实现类 什么是容器? 由一个或多个确 ...

  7. Java 集合体系详解——List体系有序集合

    引言 面向对象语言对事物的体现必然是以对象的形式,Java工程师为了方便多多个对象的操作,就对对象进行存储,集合就是存储对象的一种方式,他们的底层都是基于不同的数据结构.当然集合和数组一样都是容器,数 ...

  8. Java容器 | 基于源码分析List集合体系

    一.容器之List集合 List集合体系应该是日常开发中最常用的API,而且通常是作为面试压轴问题(JVM.集合.并发),集合这块代码的整体设计也是融合很多编程思想,对于程序员来说具有很高的参考和借鉴 ...

  9. Java集合体系总结

    一.集合框架 集合是容纳数据的容器,java常用的集合体系图如下.以集合中是否运行重复元素来分,主要有List和Set接口,List集合中可以有重复元素,Set集合集合中的元素不可重复,Iterato ...

最新文章

  1. python 对excel文件进行分词并进行词频统计_教你背单词 | 利用python分析考研英语阅读并生成词频降序表...
  2. Linux学习参考书
  3. C++中的NULL与DELPHI中的nil作用相同
  4. UTF-8和BOM的一些说明
  5. octave安装 缺java_Octave信号包安装
  6. pytorch如何定义损失函数_对比PyTorch和TensorFlow的自动差异和动态模型
  7. 谈谈对ThreadLocal的理解?(基于jdk1.8)
  8. mongodb数据库的安装 for windows版本 0916
  9. 一个进程能够打开最大文件句柄数设到多大才合适(Linux)
  10. GB28181国标流媒体服务(LiveGBS)-支持海康8700等联网网关通过接入实现web端无插件直播
  11. WM8960的音量控制测试程序
  12. 【NLP】计算所汉语词性标记集
  13. php 微信公共平台开发
  14. exo文件_eXo平台概述
  15. 电脑控制手机投屏同步声音
  16. TFN全新推出的全功能 手持式频谱分析仪 RMT系列 不仅可干扰定位 还可路测
  17. 三角函数有理式的不定积分
  18. pycharm中关于python虚拟环境的配置
  19. pygame 等有缘人接盘
  20. java编程企业思想_未央区企业级java编程思想

热门文章

  1. [UE4]修改相机裁剪距离
  2. B-Tree与B+Tree的区别
  3. html5 canvas 学习
  4. 【2016-09-27-DP小练】
  5. 构造函数的理解(构造函数与 init 方法)
  6. 【数学建模】【APIO2015】Palembang Bridges
  7. DBGrid 应用全书(一)
  8. 一条 SQL 语句在 MySQL 中如何被执行的?
  9. Lintcode 569解题思路及c++代码
  10. 科学家研发多模态生物识别系统,基于脑纹独特性来防范身份欺骗