linkin大话数据结构--Collection和Iterator



Java 集合就像一种容器,可以把多个对象的引用放入容器中。Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。Java 集合可分为 Set、List 和 Map 三种体系

1,Set:无序、不可重复的集合

2,List:有序,可重复的集合

3,Map:具有映射关系的集合

在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型



  • 为什么出现集合类?

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合和数组就是存储对象最常用的两种方式。那么问题来了:数组和集合类同是容器,有何不同?

1,数组中可以存储任意数据类型,集合只能存储对象。

2,数组能装也只能装同一种数据类型的数据,而且长度是固定的;集合只用于存储对象,可以装不同类型的对象,并且长度是可变的。



Java集合类主要由两个接口派生出来:Collection,Map这2个接口。

注意:在“集合框架”中,Map 和Collection 没有任何亲缘关系。     Map的典型应用是访问按关键字存储的值。它支持一系列集合操作,但操作的是键-值对,而不是独立的元素。    因此 Map 需要支持 get() 和 put() 的基本操作,而 Set 不需要。 

  • Collection:   集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构。最常用的几个接口如下:

1,Set:不能存放重复对象,无序

HashSet:      用 hashCode() 加 equals() 比较是否重复

      SortedSet:    会按照数字将元素排列,为“可排序集合”默认升序

      TreeSet:      按二叉树排序(效率非常高); 按Comparable接口的 compareTo() 比较是否重复

2,List:可存放重复对象,有序

ArrayList:    数组。查询快,增删慢。(List是链表)

      Vector:       线程安全,但效率很差(现实中基本不用)

3,Queue:队列:先进先出

PriorityQueue:   优先队列:元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序

4,map:其中每一个元素都是一个键值对( Key-Value)。键不能重复。可有一个空键。

SortedMap:    根据 key 值排序的 Map。

      HashMap:      用 hashCode() 加 equals() 比较是否重复





Collection接口常用方法:

boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.

boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.

void clear():清除集合里面的所有元素,将集合长度变为0。

boolean contains(Object o):返回集合里是否包含指定的元素。

boolean containsAll(Collection c):返回集合里是否包含集合c内所有的元素。

boolean isEmpty():返回集合是否为空(长度是否为0)。

Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。

boolean remove(Object o):删除集合中指定元素o。

boolean removeAll(Collection c):从集合中删除集合c里面的元素。若删除一个或以上返回true。

boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。

int size():得到集合元素的个数。

Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。

关于集合的操作有:增加、删除、遍历、排序。增加和删除不做赘述,现在就开始整理遍历最常用的操作,关于排序在后面有专门做整理。

1,使用 Iterator 接口遍历集合元素。Enumeration 接口是 Iterator 迭代器的 “古老版本”。

2,使用 foreach 循环遍历集合元素。Java 5 提供了 foreach 循环迭代访问 Collection。

关于2者:iterator对于集合才能用,for不同,只要是循环都可用。代码如下:

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; /**
*
* @version 1L
* @author LinkinPark
* @since 2014-11-10
* @motto 梦似烟花心似水,同学少年不言情
* @desc ^Iterator仅仅用来遍历集合,本身并不提供承装对象的能力,如果需要创建Iterator对象,必须要有一个被迭代的对象, 没有集合的Iterator仿佛无本之木,没有存在的价值,
* 在迭代过程中,Iterator并不是把集合元素的本身传给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何的影响。
*/
public class Linkin
{
public static void main(String[] args)
{
//创建一个集合
Collection<String> names = new HashSet<String>();
names.add("LinkinPark");
names.add("Binger");
//获得上面set对应的迭代器
Iterator<String> it = names.iterator();
while(it.hasNext())
{
String name = it.next();
System.out.println(name);
if("LinkinPark".equals(name)){
//当使用Iterator访问Collection集合元素时,集合里面的元素不能改变,必须要使用Iterator的remove方法才行。使用增强的for循环也是一样
//names.remove(name); //java.util.ConcurrentModificationException
it.remove();
}
//对name变量赋值,不会改变集合元素本身
name = "LinkinPark...";
}
System.out.println(names);
//使用增强的for循环。
for (String string : names)
{
System.out.println(string);
}
} }

以下是Iterator接口的说明:

Iterator 接口主要用于遍历 Collection 集合中的元素,Iterator 对象也被称为迭代器。Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口

Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。Iterator主要遍历Collection集合中的元素,也有称为迭代器或迭代精灵。

boolean hasNext():若被迭代的集合元素还没有被遍历,返回true。

Object  next():返回集合的下一个元素。迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。

void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)。















linkin大话数据结构--Collection和Iterator的更多相关文章

  1. linkin大话数据结构--Google commons工具类

    package tz.web.dao.bean; import java.util.Arrays; import java.util.Collection; import java.util.List ...

  2. linkin大话数据结构--List

    List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...

  3. linkin大话数据结构--泛型

    泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...

  4. linkin大话数据结构--apache commons工具类

    Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...

  5. linkin大话数据结构--Map

    Map 映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value.Map里的key不允许重复.通过key总能找到唯一的value与之对应.Map里的key集存储方式和对应的Se ...

  6. linkin大话数据结构--Queue

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必按顺序存储,所以插入和删除速度超 ...

  7. linkin大话数据结构--Set

    Set 集合 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败. Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法.也 ...

  8. linkin大话数据结构--字符串,数组,list之间的互转

    在实际开发中,我们经常会用到字符串,字符数组,字符list,当然也会不可避免的进行这3者之间的互相转换. 在使用到Apache和Google下的common包,可以这样子实现: package tz. ...

  9. linkin大话数据结构--Collections类

    操作集合的工具类:Collections Collections 是一个操作 Set.List 和 Map 等集合的工具类.Collections 中提供了大量方法对集合元素进行排序.查询和修改等操作 ...

随机推荐

  1. python之 正则表达式

    简介 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式.Python 1.5之前版本则是通过 regex 模块提供 Emacs 风格的模式.Emacs 风格模式可读 ...

  2. 读汤姆大叔《JavaScript变量对象》笔记

    一段简单的JavaScript代码思考 先看一段简单的代码,打印结果是??为什么why?? 从上述打印结果不难看出,在打印基本变量num.函数表达式fn.函数声明fun时,就已经知道变量num.函数表 ...

  3. while求1+2+3+4+5+6....100的和

    #求1到100的和. #声明i初始变量 i = 1 #声明y初始变量 y = 1 #开始循环条件为i不等于100,则执行while代码块 while i != 100: #给i加1 i += 1 #y ...

  4. javascript 执行环境细节分析、原理-12

    前言 前面几篇说了执行环境相关的概念,本篇在次回顾下 执行环境(Execution context,简称EC,也称执行上下文 ) 定义了变量或者函数有权访问的数据,决定了各自行为,每个执行环境都有一个 ...

  5. Chris Richardson微服务翻译:重构单体服务为微服务

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署 ...

  6. Java之CountDownLatch ---控制线程执行顺序

    一,类介绍 这是java.util.concurrent包里的一个同步辅助类,它有两个主要的常用方法  countDown()方法以及await()方法.在完成一组正在其他线程中执行的操作之前,它允许 ...

  7. 看JQ时代过来的前端,如何转换思路用Vue打造选项卡组件

    前言 在Vue还未流行的时候,我们都是用JQuery来封装一个选项卡插件,如今Vue当道,让我们一起来看看从JQ时代过来的前端是如何转换思路,用数据驱动DOM的思想打造一个Vue选项卡组件. 接下来, ...

  8. eclipse自动提示功能没了的解决方法

    eclipse没有自动提示功能,也就是当一个对象居然点不出他的相关方法.后来网上搜索了下,成功的 办法是. 1.我window->Preferences->Java->Editor- ...

  9. 记录因webpack版本问题导致vue-cli快速搭建的项目运行时报错!

    今日突然在群里见到好几个小伙伴说在创建vue项目后不能跑,会报错. 刚开始还不信,花了几分钟时间自己试了下,还真报错了!如下图 小伙伴的报错,如下图!   百思不得其解,看了运行的日志也找不出原因.于 ...

  10. webshell 生成工具 b374k

    还在为不会写webshell而感到心累?还在为webshell有后而不敢用?? b374k,我们首先去github下载b374k https://github.com/b374k/b374k.git ...