listIterator


public class ListTerator {
	public static void main(String[] args) {
		List integers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
        ListIterator test = integers.listIterator();
      /*  ListIterator test2 = integers.listIterator();
        test2=integers.listIterator(8);*/
        test= integers.listIterator(8);
        while(test.hasPrevious()){
            System.out.print(test.previous()+"\t");
        }
        System.out.println("**************************");
       
        while(test.hasNext()){
        	System.out.print(test.next()+"\t");
        }
        ////////////////////////////////////////////////////////Character
		   //  ArrayList arr = new ArrayList();
		    /* arr.add("aaa");
		     arr.add("bbb");
		     arr.add("ccc");
		     arr.add("ddd");*/
       /* ArrayList list = new ArrayList<>();
        for (char c = 'A'; c <= 'G'; c++) {
            list.add(c);
        }
         
        Iterator it = list.iterator();
        while (it.hasNext()) {
            char c = it.next(); // next() 返回下一个元素
            if (c == 'C') {
                it.remove(); // remove() 移除元素
            } else {
                System.out.print(c + ", ");
            }
*/
		     ArrayList arr = new ArrayList<>();
		     for(char i='a';i<='m';i++){
		    	 arr.add(i);
		     }
		     System.out.println("**************************");
		     System.out.println("之前 : " + arr);
		     
		      ListIterator lis = arr.listIterator();
		      //ListIterator listIterator();
		      //  ListIterator listIterator(int index);
		      while (lis.hasNext()) {
		          System.out.println(lis.next() + ", " + lis.previousIndex() + ", " + lis.nextIndex());
		       }
		       while (lis.hasPrevious()) {
		            System.out.print(lis.previous() + " ");
		       }
		       System.out.println("///////////////////");
		       lis = arr.listIterator(3);//调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator。
	  /*
		       public ListIterator listIterator(int index) {
		           if (index < 0 || index > size)
		               throw new IndexOutOfBoundsException("Index: "+index);
		           return new ListItr(index);
		       }*/
		       
		       /* 
	     * private class ListItr extends Itr implements ListIterator {
        ListItr(int index) {
            super();
            cursor = index;
        }

        public boolean hasPrevious() {
            return cursor != 0;
        }

        public int nextIndex() {
            return cursor;
        }

        public int previousIndex() {
            return cursor - 1;
        }

        @SuppressWarnings("unchecked")
        public E previous() {
            checkForComodification();
            int i = cursor - 1;
            if (i < 0)
                throw new NoSuchElementException();
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            cursor = i;
            return (E) elementData[lastRet = i];
        }

	     * 
		       */
		       while (lis.hasNext()) {
	    	  Character t = lis.next();
		           System.out.println(t);
		          if ("".equals(t)) {
		        	  /*lis.set("nnn");*/
		        	  lis.set('p');
		           } else {
		        	  /* lis.add("kkk");*/
		        	   lis.add('s');
	           }
		        }
		       System.out.println("之后 : " + arr);
		    }
}

8    7    6    5    4    3    2    1    **************************
1    2    3    4    5    6    7    8    9    **************************
之前 : [a, b, c, d, e, f, g, h, i, j, k, l, m]
a, 0, 1
b, 1, 2
c, 2, 3
d, 3, 4
e, 4, 5
f, 5, 6
g, 6, 7
h, 7, 8
i, 8, 9
j, 9, 10
k, 10, 11
l, 11, 12
m, 12, 13
m l k j i h g f e d c b a ///////////////////
d
e
f
g
h
i
j
k
l
m
之后 : [a, b, c, d, s, e, s, f, s, g, s, h, s, i, s, j, s, k, s, l, s, m, s]
 

 

 

解决了Iterator存在的问题

  • ListIterator有add()方法,可以向List中添加对象,而Iterator不能

  • ListIterator和Iterator都有hasNext()next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

  • ListIterator可以定位当前的索引位置,nextIndex()previousIndex()可以实现。Iterator没有此功能。

  • ListIterator 可以再迭代时对集合进行addsetremove操作,而Iterator迭代器只能在迭代时对集合进行 remove 操作

listIterator_第1张图片

 

listIterator_第2张图片

 

listIterator_第3张图片

 

listIterator_第4张图片

 

 

listIterator_第5张图片

listIterator_第6张图片

listIterator_第7张图片

listIterator_第8张图片

 

 

 

 

 

你可能感兴趣的:(Java)