Java iterator 迭代器如何加入元素...可以加入不同类型的元素么?

Java iterator 迭代器如何加入元素...可以加入不同类型的元素么?,第1张

java中iterator方法的调用是,对象.iterator(),你说的collection<>coll,首先要看泛型中定义成什么了,如果collection<>coll是collection<Integer>coll,那你的String类型的数据一定加不进去collection<Integer>coll = new ArrayList(),所以就无法用同一个对象的迭代器了。解决方法可以:

Collection<Integer>coll = new ArrayList<Integer>()

coll.add(1111)

Iterator<Integer>collIt = coll.iterator()

while(collIt.hasNext()){

System.out.println(collIt.next())

}

List<String>list = new ArrayList<String>()

list.add("123")

Iterator<String>listIt = list.iterator()

while(listIt.hasNext()){

System.out.println(listIt.next())

}

/*

-------------------华丽的分割线第二种方法

*/

//这是个不负责的设计,正确的设计应该严格控制调用的参数,切记

Collection coll2 = new ArrayList()

coll2.add("123")

coll2.add(123)

Iterator list2It = coll2.iterator()

while(list2It.hasNext()){

System.out.println(list2It.next())

}

用的是c++ map的insert方法。

函数定义:

single element (1)  插入单个元素 队尾插入

pair<iterator,bool>insert (const value_type&val)

with hint (2)  插入单个元素 在position的位置插入

iterator insert (iterator position, const value_type&val)

range (3)  插入一串元素 一般用的是另一个map中的,从开始到结束

template <class InputIterator> void insert (InputIterator first, InputIterator last)

示例:

// map::insert (C++98)

#include <iostream>

#include <map>

int main ()

{

  std::map<char,int> mymap

  // first insert function version (single parameter):第1种

  mymap.insert ( std::pair<char,int>('a',100) )

  mymap.insert ( std::pair<char,int>('z',200) )

  std::pair<std::map<char,int>::iterator,bool> ret

  ret = mymap.insert ( std::pair<char,int>('z',500) )

  if (ret.second==false) {

    std::cout << "element 'z' already existed"

    std::cout << " with a value of " << ret.first->second << '\n'

  }

  // second insert function version (with hint position):第2种

  std::map<char,int>::iterator it = mymap.begin()

  mymap.insert (it, std::pair<char,int>('b',300))  // max efficiency inserting

  mymap.insert (it, std::pair<char,int>('c',400))  // no max efficiency inserting

  // third insert function version (range insertion):第3种

  std::map<char,int> anothermap

  anothermap.insert(mymap.begin(),mymap.find('c'))

  // showing contents:

  std::cout << "mymap contains:\n"

  for (it=mymap.begin() it!=mymap.end() ++it)

    std::cout << it->first << " => " << it->second << '\n'

  std::cout << "anothermap contains:\n"

  for (it=anothermap.begin() it!=anothermap.end() ++it)

    std::cout << it->first << " => " << it->second << '\n'

  return 0

}

 

Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素。

Iterator iter = list.iterator()// 注意iterator,首字母小写

iterator是为了实现对Java容器(collection)进行遍历功能的一个接口。

在iterator实现了Iterator接口后,相当于把一个Collection容器的所有对象,做成一个线性表(List),而iterator本身是一个指针,开始时位于第一个元素之前。

判断 iterator 内是否存在下1个元素,如果存在,返回true,否则返回false。(注意,这时上面的那个指针位置不变)

返回 iterator 内下1个元素,同时上面的指针向后移动一位。

故,如果不断地循环执行next()方法,就可以遍历容器内所有的元素了。

删除 iterator 内指针的前1个元素,前提是至少执行过1次next()

(这个方法不建议使用,建议使用容器本身的romove 方法)

遍历1个ArrayList 和Linklist是十分容易的,遍历1个Tree容器也不难,但是实现机制是完全不同,而遍历1个Set容器就无从下手了。

所以Java设计了Iterator 这个接口,分别让各种容器自己去重写里面的hasNext()和next()方法。

不用关心各种容器的遍历机制,只要使用Iterator,会让人觉得各种容器的遍历方法都是一样的,这就是Java接口的重要意义。

在Java的各种容器中,例如ArrayList,HashSet等,并没有直接实现Iterator这个接口。所以ArrayList,HashSet容器内是没有hasnext(),next()的方法的,而是iterator() 这个方法,返回1个实现了Iterator接口的iterator对象。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11591086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存