Collection的迭代器实现

    xiaoxiao2021-03-25  85

    集合的遍历方法

    List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); 方法一: 超级for循环遍历 for(String attribute : list) { System.out.println(attribute); } 方法二: 对于ArrayList来说速度比较快, 用for循环, 以size为条件遍历: for(int i = 0 ; i < list.size() ; i++) { system.out.println(list.get(i)); } 方法三: 集合类的通用遍历方式, 从很早的版本就有, 用迭代器迭代 Iterator it = list.iterator(); while(it.hasNext()) { System.ou.println(it.next); }

    设计自己的Iterator迭代器

    设计自己的迭代器接口功能包括哪些功能 /** * Created by shiqiang on 2016/12/22. */ public interface Iterator { //前移 Object previous(); //后移 Object next(); //是否有下一个元素 boolean hasNext(); //取得第一个元素 Object first(); } 实现该接口的迭代器 /** * Created by shiqiang on 2016/12/22. */ public class MyIterator implements Iterator { private MyCollection myCollection; //私有化一个变量 private int pos = -1; //将集合传递进来 public MyIterator(MyCollection myCollection) { this.myCollection = myCollection; } @Override public Object previous() { //前移将pos位置减一返回集合中的元素 if (pos > 0){ pos -- ; } return myCollection.get(pos); } @Override public Object next() { //后移将pos位置加一返回集合中的元素 if (pos < myCollection.size() - 1){ pos ++ ; } return myCollection.get(pos); } @Override public boolean hasNext() { // 是否还有下一个元素,有返回true,否则为false if (pos < myCollection.size() - 1){ return true ; }else{ return false ; } } @Override public Object first() { //返回集合中第一个位置的值 pos = 0 ; return myCollection.get(pos); } } 集合的接口:注意需要哪些数据,在MyIterator中需要 myCollection.get(pos),myCollection.size() ,所以接口中应该此方法 /** * Created by shiqiang on 2016/12/22. */ public interface Collection { //集合的迭代器接口 public Iterator iterator(); //得到集合中的元素 public Object get(int i); //得到集合的长度 public int size(); } 实现该接口的集合 /** * Created by shiqiang on 2016/12/22. */ public class MyCollection implements Collection { /* 由于List的add方法比较麻烦,所以这边只有固定数组来标示集合~List.add实现思路如下: List集合的策略,初始一个数组长度,达到长度时new一个新数组, 新数组的长度是原数组长度的二倍,然后把原数组的内容复制到新数组, 再将新的元素加到数组中。其中肯定有一个变量来记录最后一个元素所在的数组下标。 */ public String string[] = {"A","B","C","D","E"}; @Override public Iterator iterator() { //将此集合传递进去,就像MVP模式一样的 return new MyIterator(this); } @Override public Object get(int i) { return string[i]; } @Override public int size() { return string.length; } } 调用自己的集合跟迭代器遍历集合取出数据 MyCollection myCollection = new MyCollection(); //初始化自己的iterator,注意myCollection.iterator()返回的是 return new //MyIterator(this);实现了Iterator接口,父类指向子类,下面调用的是子类的方法! Iterator iterator = myCollection.iterator(); // System.out.println(iterator.first().toString() + "nimei"); while (iterator.hasNext()){ System.out.println(iterator.next() + "我是:"); }
    转载请注明原文地址: https://ju.6miu.com/read-40095.html

    最新回复(0)