简单容器的分类:

2、容器初探

1. 简单容器的分类

 

在“图1”中总结出了常用容器的简单关系。可以看到,只有4类容器:ListSetQueueMap。上图中虚线框表示一个接口,实线框表示一个具体的实现类,虚线箭头线表示一种“实现”关系,实线箭头线表示一种“继承”关系。红线箭头不表示实现与继承关系。

为了理清楚“图1”中简单容器的关系,首先从迭代器(Iterator)的作用开始讲解。

 

一、迭代器

迭代器是一个对象,它的工作是遍历并选择容器中的对象,而程序员不必要知道或关心容器的底层实现(无论ListQueueSet都采用同样的方式来对待)。迭代器是一个轻量级的对象,创建它的代价很小,同样功能也简单(比如:只能单向移动)。只具备如下的功能:

①、使用方法iterator()要求容器返回一个IteratorIterator将准备好返回容器的第一个元素。

②、使用next()获得容器的下一个元素。

③、使用hasNext()检查容器中是否还有元素。

④、使用remove()将迭代器新近返回的元素删除。

迭代器真正的强大在于将遍历容器的操作与容器底层结构相分离。

 

例如:打印包含有Person对象的容器可以写下面一个方法,只需要向打印方法中传入一个迭代器即可,至于这个容器到底是List还是Set根本不需要关心。

 

1 void printPerson(Iterator<Person> itr){
2     if(itr == null)
3         return;
4     while(itr.hasNext()){
5         Person p = itr.next();
6         System.out.println(p.getName() + " " + p.getAge());
7     }
8 }

 

Collection接口中就定义有iterator()方法,所以如果容器是ListSetQueue则只需要直接调用对象的iterator()方法便可以得到一个迭代器对象。

但是,Map容器并没有实现Collection接口,那么一个Map类型的容器该如何获得一个迭代器对象呢?Map定义了三个Collection视角的方法:

①、map.entrySet(); 返回一个Set<Entry<T, E>>对象,SetSet<Entry<T, E>>对象中有iterator()方法。

②、map.keySet();  返回一个Set<T>对象,Set<T>对象中有iterator()方法。

③、map.values(); 返回一个Collection<T>对象,Collection<T>对象中有iterator()方法。

 

下面是一个迭代器用于Map的例子:

 

 1 import java.util.*;
 2 import java.util.Map.Entry;
 3 public class Main{
 4     public static void main(String args[]){
 5         
 6         Map<Integer, String> map = new HashMap<>();
 7         map.put(1, "aaa");
 8         map.put(2, "bbb");
 9         map.put(3, "ccc");
10         map.put(4, "ddd");
11         
12         Set<Entry<Integer, String>> setEntry = map.entrySet();
13         Iterator<Entry<Integer, String>> itrEntry = setEntry.iterator();
14         System.out.println("--------map.entrySet()--------");
15         while(itrEntry.hasNext()){
16             Entry<Integer, String> entry = itrEntry.next();
17             Integer key = entry.getKey();
18             String val = entry.getValue();
19             System.out.print(key + ":" + val + " ");
20         }
21         
22         Set<Integer> setKey = map.keySet();
23         Iterator<Integer> itrKey = setKey.iterator();
24         System.out.println("\n\n--------map.keySet()--------");
25         while(itrKey.hasNext()){
26             Integer key = itrKey.next();
27             System.out.print(key + " ");
28         }
29         
30         Collection<String> values = map.values();
31         Iterator<String> itrValues = values.iterator();
32         System.out.println("\n\n--------map.values()--------");
33         while(itrValues.hasNext()){
34             String val = itrValues.next();
35             System.out.print(val + " ");
36         }
37     }
Map中使用迭代器

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-02
  • 2022-02-07
  • 2022-01-06
  • 2022-03-09
猜你喜欢
  • 2022-12-23
  • 2021-06-18
  • 2021-06-13
  • 2022-12-23
  • 2021-12-05
  • 2021-04-19
  • 2021-06-05
相关资源
相似解决方案