Java容器类接口:Iterator,Collection,Map
Iterator
Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作:
- 使用方法iterator()要求容器返回一个Iterator,Iterator将返回序列的第一个元素;
- 使用next()获取序列中的下一个元素;
- 使用hasNext()检查序列中是否有元素;
- 使用remove()将迭代器最近返回的元素删除;
Iterator只能向前移动,ListIterator是一个更加强大的Iterator的子类,它只能用于各种List类的访问,ListIterator可以双向移动,它能产生当前迭代器指向的列表中元素的前一个和后一个元素的索引,并且可以使用set()方法替换它访问过的最后一个元素。
Iterator在JDK中是一个接口,在JDK8中它的子接口包含
|
ListIterator<E>, PrimitiveIterator<T,T_CONS>, |
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中它的子接口包含
|
BlockingDeque<E>, BlockingQueue<E>, Deque<E>, List<E>, NavigableSet<E>, Queue<E>, Set<E>, SortedSet<E>, |
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>的子接口包含
|
ConcurrentMap<K,V>, ConcurrentNavigableMap<K,V>, NavigableMap<K,V>, SortedMap<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的更多相关文章
- java容器类分析:Collection,List,ArrayList
1. Iterable 与 Iterator Iterable 是个接口,实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符 ...
- java容器类1:Collection,List,ArrayList,LinkedList深入解读
1. Iterable 与 Iterator Iterable 是个接口,实现此接口使集合对象可以通过迭代器遍历自身元素. public interface Iterable<T> 修饰符 ...
- Java容器类接口的选择
我们知道Java容器类实际提供了四类接口:Map,List,Set和Queue,如下图所示,每种接口都有不止一个版本的实现,如果在实际编写程序时需要使用某种接口时该如何选择. 从Oracle的Java ...
- java容器类3:set/HastSet/MapSet深入解读
介绍 Set:集合,是一个不包含重复数据的集合.(A collection that contains no duplicate elements. ) set中最多包含一个null元素,否者包含了两 ...
- java容器类4:Queue深入解读
Collection的其它两大分支:List和Set在前面已近分析过,这篇来分析一下Queue的底层实现. 前三篇关于Java容器类的文章: java容器类1:Collection,List,Arra ...
- 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)
两个月之前准备软考时,简单的从理论上总结了最经常使用的数据结构和算法,比方:线性表,链表,图.在进行java开发时,jdk为我们提供了一系列对应的类来实现主要的数据结构.jdk所提供的容器API位于j ...
- Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable
Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...
- 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...
- JAVA集合详解(Collection和Map接口)
原文地址http://blog.csdn.net/lioncode/article/details/8673391 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父 ...
随机推荐
- iOS开发数据库SQLite的使用
iOS系统自带Core Data来进行持久化处理,而且Core Data可以使用图形化界面来创建对象,但是Core Data不是关系型数据库,对于Core Data来说比较擅长管理在设备上创建的数据持 ...
- 笔记6:winfrom连接sql server 进行数据交换
今天的作业是用winfrom窗体做一个留言板,如图: 要求和数据库有查询和添加功能.下拉框里的值是直接获取数据库中的值 一.连接数据库,获取表中数据 //创建一个存数据的表 DataTable tab ...
- 看懂UML图
看懂UML类图和时序图 这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图 ...
- JavaScript自定义类和对象的方法
备注:JavaScript中没有类class的概念,一般把原型对象看作类 1. 工厂方法--使用new Object创建对象并添加相关属性 var Obj = new Object; ...
- hdu----(4513)吉哥系列故事——完美队形II(manacher(最长回文串算法))
吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)To ...
- JavaSE基础之this关键字的引用
1.0 this 指代当前对象, 在一般方法中可以通过this来引用当前对象的成员(方法,属性). 2.0 通过 this() 调 用重载的构造器,需要注意的是,通过此种方法调用的重载构造器 ...
- 给文本标签UILabel添加长按复制功能
http://www.111cn.net/sj/iOS/104236.htm http://blog.csdn.net/lrenjun/article/details/12582927 自定义一个可复 ...
- 使用git上传项目
1. 安装Git 2. 安装TortoiseGit 3.任意文件夹选择「TortoiseGit」>「settings」,打开如下界面. 3. 生成SSH公钥 3.1运行Git Bash,如下命令 ...
- 《Play for Java》学习笔记(二)基本的CRUD应用
注解: CRUD——Create,Retrieve, Update, Delete 文件结构
- Spring源码学习-PropertyPlaceholderHelper
转载:http://my.oschina.net/ydsakyclguozi/blog/465526 1. CustomPropertyConfigurer.java package property ...