JAVA---Linklist与ListIteractor

来源:互联网 发布:诺基亚e66软件下载 编辑:程序博客网 时间:2024/05/29 15:55
 [参考链接](http://blog.csdn.net/PacosonSWJTU/article/details/50302083#)
  1. 给Linklist里面添加数据的add方法;
    List staff = new LinkedList();
    staff.add(“amy”);
    staff.add(“bob”);
    staff.add(“car1”);
    1. 使用迭代器对链表里面的内容进行迭代,删除
      Iterator i = staff.iterator();
      String first = (String)i.next(); //返回值为第一个元素
      String second = (String)i.next(); //返回值为第二个元素
      i.remove(); //删除迭代器左边的值
    2. 使用 ListIteractor 给有序集合的任意位置插入值
      String[] numbers= new String[]{“4”,”7”,”8”,”9”};
      LinkedList list = new LinkedList(Arrays.asList(numbers));
      ListIterator li= list.listIterator();
      li.add(“1”);
      li.add(“2”);
    3. 使用迭代器对链表进行正序和逆序遍历
      while(li.hasnext()){
      System.out.println(li.next());
      }
      while(li.hasprevious()){
      System.out.println(li.previous());
      }
      1. 使用迭代器进行遍历的时候,需要注意以下几点:
        如果多次调用add方法,将按照提供的次序把元素添加到链表中,它们被依次添加到迭代器当前位置之前;
        当用一个刚刚由 Iterator方法返回,并且指向链表表头的迭代器中调用add()方法时,此时的迭代器指向链表表头,所以,新添加的元素是作为链表的首元素;当迭代器越过了链表的最后一个元素,新添加的元素作为链表的最后一个元素;
        如果链表有n个元素,那么将会有n+1个位置可以添加元素;
        注意remove()操作和backspace光标键,在迭代器调用了next()方法以后,remove()删除的是迭代器左边的元素,Backspace 删除的也是光标左边的元素;但是在同一行中不能执行两次remove()在调用了previous()方法之后,删除的是迭代器右边的元素;
        add()方法只依赖于迭代器的位置,remove()方法依赖与迭代器的状态;
      2. 在使用迭代器的过程中遇到的问题:如果用多个迭代器来访问一个集合,就会出现访问混乱的问题,如果迭代器发现它的集合被另一个迭代器修改了,就会抛出异常;为了避免出现并发修改异常,可以根据需要给容器添加很多的迭代器,只用于读,然后再添加一个既能读也能写的迭代器;还有一种方法可以检查异常,避免访问出错;让集合跟踪改写次数,然后给每个迭代器都维护一个独立的计数值,在每个迭代器的开始处检查自己的修改计数值是否与集合的改写操作计数值一致,如果不一致则抛出异常;这种跟踪只负责跟踪结构性修改;对于 set()方法不跟踪;
      3. 选择数组不选链表的情况:链表不支持随机的快速访问,但是链表中提供了通过下标访问元素的方法,需要从头遍历;对于需要通过下标访问元素时,通常不选用链表;如果要对集合实现随机访问,就选用数组,JAVA迭代器指向两个元素中间的位置,所以可以同时产生两个索引,nextindex() previousindex() 第一个返回下次调用next方法返回的索引,第二个返回调用previous 方法返回的索引下标;有一种方法是,list.iteractor(n) 返回的迭代器指向n前面的位置,通过 next() 也可以实现 与 list.get(n)实现访问集合元素;
原创粉丝点击