Iterator

Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作:

  • 使用方法iterator()要求容器返回一个Iterator,Iterator将返回序列的第一个元素;
  • 使用next()获取序列中的下一个元素;
  • 使用hasNext()检查序列中是否有元素;
  • 使用remove()将迭代器最近返回的元素删除;

Iterator只能向前移动,ListIterator是一个更加强大的Iterator的子类,它只能用于各种List类的访问,ListIterator可以双向移动,它能产生当前迭代器指向的列表中元素的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。

Iterator在JDK中是一个接口,在JDK8中它的子接口包含

Iterator定义如下:

public interface Iterator<E> {

boolean hasNext(); //如果有元素可以迭代则返回true

E next(); //返回迭代的下一个元素

void remove(); //从迭代器指向的Collection中移除迭代器返回的最后一个元素

}

Iterator使用实例:

import java.util.ArrayList;
import java.util.Iterator; public class IteratorTest {
public static void play(Iterator<String> it) {
while(it.hasNext()) {
System.out.println(it.next());
}
} public static void main(String[] args) {
ArrayList<String> ss = new ArrayList<String>();
for(int i = 0; i < 7; i++) {
ss.add("i:" + i);
}
play(ss.iterator());
}
}

ListIterator允许按任意一方向遍历列表,迭代期间修改列表,并获得迭代器在列表中的位置。ListIterator没有当前元素,它的光标位置始终位于调用previous所返回的元素和调用next所返回元素之间。

ListIterator实现如下:

public interface ListIterator<E> extends Iterator<E> {

boolean hasNext(); //正向遍历列表时如果迭代器有多个元素,返回true

E next(); //返回列表中的下一个元素,可以重复使用迭代列表

boolean hasPrevious(); //反向遍历列表时如果迭代器有多个元素,返回true

E previous(); //返回列表中的上一个元素

int nextIndex(); //返回对next后续调用返回的索引

int previousIndex(); //返回对previous调用返回的索引

void remove(); //从列表中移除由next或previous返回的最后一个元素

void set(E e); //用指定元素替换next或previous返回的最后一个元素

void add(E e); //将指定元素插入列表

}

ListIterator使用实例:

import java.util.LinkedList;
import java.util.ListIterator; public class ListIteratorTest {
public static void play(ListIterator<String> it) {
while(it.hasNext()) {
System.out.print(it.next() + " " + it.nextIndex() + "|");
}
it.set("xxxxxxx");
it.add("yyyyyyy");
System.out.println();
System.out.println(it.previous() + " " + it.next());
while(it.hasPrevious()) {
System.out.print(it.previous() + " " + it.previousIndex() + "|");
}
} public static void main(String[] args) {
LinkedList<String> ls = new LinkedList<String>();
for (int i = 0; i < 5; i++) {
ls.add("aaaaaaa");
}
play(ls.listIterator());
}
}

Collection

Collection是描述所有序列容器的共性根接口,使用接口可以创建富有通用性的代码,可以通过接口而非具体的实现来编写代码,如果编写的方法接受一个Collection,则该方法接受任何用于实现了Collection的类。

Collection接口继承自Iterable,在JDK8中它的子接口包含

Collection的定义如下

public interface Collection<E> extends Iterable<E> {

int size(); //返回Collection中的元素数

boolean isEmpty(); //如果Collection不包含元素返回true

boolean contains(Object o); //如果Collection包含指定的元素返回true

Iterator<E> iterator(); //返回此Collection的迭代器

Object[] toArray(); //返回此Collection所有元素组成的数组

<T> T[] toArray(T[] a); //返回此Collection所有元素组成的数组

boolean add(E e); //确保此Collection包含指定的元素

boolean remove(Object o); //从此Collection中移除指定的元素

boolean containsAll(Collection<?> c); //如果包含指定Collection中的元素返回true

boolean addAll(Collection<? extends E> c); //至指定的Collectio中的元素加入

boolean removeAll(Collection<?> c); //移除指定Collection的元素

boolean retainAll(Collection<?> c); //只保留指定的Collection中的元素

void clear(); //移除Collection中的所有元素

boolean equals(Object o); //比较与指定对象是否相等

int hashCode(); //返回此Collection的哈希值

}

类AbstractCollection提供了Collection接口最基本的实现,最大程度的减少了实现Collection接口的工作。如果需要实现一个新的不可修改的Collection,则只需要扩展AbstractCollection即可,需要提供iterator()和size()方法的实现(iterator方法返回的迭代器必须实现hasNext和next),如果要实现一个可修改的Collection,则必须重写add方法,iterator方法返回的迭代器还必须实现remove方法。

Collection具体实现可以在之后的List,Set,Queue中见到。

Map

Map:Map<K, V> 在Java中提供键值映射的接口,K代表此映射所维护的键的类型,V代表此映射值的类型。一个映射不能包含重复的键,每个键最多只能映射到一个值。Map提供了三种Collection的视图,键集合,值集合以及键值映射关系集合。

Map<K, V>的子接口包含

Map<K, V>的定义如下,Map<K, V>中包含一个嵌套的接口表示映射的键值对

public interface Map<K,V> {

int size(); //返回此映射中的键-值映射关系数

boolean isEmpty(); //如果此映射未包含键-值映射关系,则返回 true

boolean containsKey(Object key); //如果此映射包含指定键的映射关系,则返回 true

boolean containsValue(Object value); //如果此映射将一个或多个键映射到指定值,则返回 true

V get(Object key); //返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null

V put(K key, V value); //将指定的值与此映射中的指定键关联

V remove(Object key); //如果存在一个键的映射关系,则将其从此映射中移除

void putAll(Map<? extends K, ? extends V> m); //从指定映射中将所有映射关系复制到此映射中

void clear(); //从此映射中移除所有映射关系

Set<K> keySet(); //返回此映射中包含的键的 Set 视图

Collection<V> values(); //返回此映射中包含的值的 Collection 视图

Set<Map.Entry<K, V>> entrySet(); //返回此映射中包含的映射关系的 Set 视图

interface Entry<K,V> {

K getKey();

V getValue();

V setValue(V value);

boolean equals(Object o);

int hashCode();

}

boolean equals(Object o); //比较指定的对象与此映射是否相等

int hashCode(); //返回此映射的哈希码值

}

Map<K, V>的使用实例

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; public class MapTest {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
map.put("a", "AA");
map.put("b", "BB");
map.put("c", "CC"); Set set = map.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry<String, String> me = (Map.Entry<String, String>)it.next();
System.out.println(me.getKey() + " " + me.getValue());
}
}
}

Java容器类接口:Iterator,Collection,Map的更多相关文章

  1. java容器类分析:Collection,List,ArrayList

    1. Iterable 与 Iterator Iterable 是个接口,实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符 ...

  2. java容器类1:Collection,List,ArrayList,LinkedList深入解读

    1. Iterable 与 Iterator Iterable 是个接口,实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符 ...

  3. Java容器类接口的选择

    我们知道Java容器类实际提供了四类接口:Map,List,Set和Queue,如下图所示,每种接口都有不止一个版本的实现,如果在实际编写程序时需要使用某种接口时该如何选择. 从Oracle的Java ...

  4. java容器类3:set/HastSet/MapSet深入解读

    介绍 Set:集合,是一个不包含重复数据的集合.(A collection that contains no duplicate elements. ) set中最多包含一个null元素,否者包含了两 ...

  5. java容器类4:Queue深入解读

    Collection的其它两大分支:List和Set在前面已近分析过,这篇来分析一下Queue的底层实现. 前三篇关于Java容器类的文章: java容器类1:Collection,List,Arra ...

  6. 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

    两个月之前准备软考时,简单的从理论上总结了最经常使用的数据结构和算法,比方:线性表,链表,图.在进行java开发时,jdk为我们提供了一系列对应的类来实现主要的数据结构.jdk所提供的容器API位于j ...

  7. Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable

    Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...

  8. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  9. JAVA集合详解(Collection和Map接口)

    原文地址http://blog.csdn.net/lioncode/article/details/8673391 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父 ...

随机推荐

  1. each用法

    1.数组用法 <script> var s=["s","i","l","e","n",& ...

  2. jquery 设置css样式

       $("#61dh a").css('color', 多个样式属性 var divcss = { background: '#EEE', width: '478px', mar ...

  3. $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法

    $('#checkbox').attr('checked'); 返回的是checked或者是undefined解决办法 <input type='checkbox' id='cb'/>  ...

  4. (26)odoo中的序列运用

    * 模块中增加序列    __openerp__.py :    ...     'data': [        'product_data.xml',    ],    ...    ------ ...

  5. sql里Where条件顺序

    以前的理解: sql语句里where后面的条件是否分先后顺序的 ,比如 A and B and C和 C and B and A 是一样,不像C语言 A && B 与B &&a ...

  6. HTTP脚本化——XMLHttpRequest对象的学习笔记

    一. HTTP 请求和响应 一个HTTP请求由4部分组成 HTTP请求方法(也叫动作Verb) 正在请求的URL 一个可选的请求头集合(可能包含身份验证信息等) 一个可选的请求主体 服务器返回的HTT ...

  7. 声明式编程——抽象程度更高,关注是什么(what),而非如何做(how)

    CSDN:AngularJS的设计理念是什么?灵感来自于什么? Misko:AngularJS遵循的设计理念是--构建UI应该是声明式的.这也是AngularJS中标识符(directives)想法的 ...

  8. Storm(4) - Distributed Remote Procedure Calls

    Using DRPC to complete the required processing 1. Create a new branch of your source using the follo ...

  9. mysql 索引长度限制

    MyISAM存储引擎引键的长度综合不能超过1000字节 InnoDB单列索引长度不能超过767bytes,联合索引还有一个限制是3072

  10. PHP+socket游戏数据统计平台发包接包类库

    <?php /** * @title: PHP+socket游戏数据统计平台发包接包类库 * @version: 1.0 * @author: perry <perry@1kyou.com ...