zoukankan      html  css  js  c++  java
  • Day 4:集合——迭代器与List接口

    Collection-迭代方法

    1、toArray()  返回Object类型数据,接收也需要Object对象! Object[] toArray();

      Collection c = new ArrayList();

      Object[] arr = c.toArray();

    2、iterator()  Collection的方法,返回实现Iterator接口的对象,一般用Iterator接口类型数据接收,体现程序的多态性,是程序灵活的表现

     迭代器的作用:就是用于抓取集合中的元素。

    迭代器的方法:
                hasNext()   问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。
                next()         获取元素
                remove()    移除迭代器最后一次返回 的元素。

    NoSuchElementException 没有元素的异常。
    出现的原因: 没有元素可以被迭代(抓取)了

    import java.util.*;
    public class Demo1 {
    
        public static void main(String[] args) {
            Collection c = new ArrayList();
            Collection r = new ArrayList();
            c.add("李杰");
            c.add("李英");
            c.add("李汉斯");
            c.add("李汉三");
            c.add("狗蛋");
            
            Iterator b = c.iterator();
            Iterator h = r.iterator();
            //返回一个迭代器    
            //疑问:iterator()方法返回的是一个接口类型,为什么接口又可以调用方法可以使用呢?  
            //iterator 实际 上返回的是iterator接口的实现类对象。
            System.out.println(b.hasNext());
            System.out.println(h.hasNext());
            
            b.next();
            b.next();
            b.remove();  //删除迭代器最后一次返回的元素。
    
            /*while(b.hasNext()){ // hasNext() 问是否有元素可以遍历。
                System.out.println("元素:"+ b.next()); //获取元素
            }*/
            /*清空集合 的元素
            while(b.hasNext()){
                b.next();
                b.remove();
            }*/
            System.out.println("集合的元素:"+ c);
        }
    }

    因为迭代器不会返回元素,所以remove();方法不会主动移除集合中数据,需要配合next()使用。及删除的是next()最后一次抓取的数据

    遍历集合的方法
    1、
    Object[] arr = c.toArray(); // toArray()  把集合 的元素存储到一个 Object的数组中 返回。
    for(int i = 0 ; i<arr.length ; i++){
     System.out.print(arr[i]+",");
    }
    2、使用hasNext()    next()组合方法便利

    while(it.hasNext()){

        User user = (User) it.next();

        if(user.account==id&&user.password.equals(password)){

        isLogin = true;

         }

    }

    3、

    使用get方法遍历集合的元素:
      for (int i = 0; i < list.size() ; i++) {
       System.out.print(list.get(i)+",");
      }

    集合的体系:

     Collection 单列集合 的根接口

         List  如果是实现了List接口的集合类,该集合类具备的特点:有序,可重复

        Set   如果是实现了Set接口的集合类,该集合类具备的特点: 无序,不可重复

    List接口

    有序: 集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的

    List接口中特有的方法具备的特点: 操作的方法都存在索引值。 
    只有List接口下面的集合类才具备索引值。其他接口下面的集合类都没有索引值。

    List接口中特有方法:    

    添加

        add(int index, E element)
        addAll(int index, Collection<? extends E> c)
    获取:
        get(int index)
        indexOf(Object o)
        lastIndexOf(Object o)
        subList(int fromIndex, int toIndex)
    修改:
        set(int index, E element)

    迭代

        listIterator()

    import java.util.*;public class Demo2 {
        
        public static void main(String[] args) {
            List list=  new ArrayList();
            list.add("李杰");
            list.add("李英");
            list.add("李汉三");  
            list.add("李汉斯");
            
            /*    
            //添加方法
            list.add(2, "李四"); 
            List list2 = new ArrayList();
            list2.add("张三");
            list2.add("王二");
            list.addAll(2,list2);
            */
            
            /*
            //获取的方法 
            System.out.println(list.get(1)); //根据索引值获取集合中的元素
            使用get方法遍历集合的元素:
            for (int i = 0; i < list.size() ; i++) {//判断集合长度用size()
                System.out.print(list.get(i)+",");
            }
            
            System.out.println(list.indexOf("李杰"));//找出指定元素第一次出现在集合中 的索引值
            System.out.println(list.lastIndexOf("李汉斯"));//找指定的元素最后一次出现在集合中的索引值
            List subList = list.subList(1, 3); //指定开始与结束的索引值截取集合中的元素。
            System.out.println(subList)//返回值是一个List输出子集合的元素 
            */    
            list.set(3, "李白"); //使用指定的元素替换指定索引值位置的元素。
            
            System.out.println(list);//输出集合的元素,查看效果        
        }
    }

    ListIterator接口特有的方法:
     
     添加:
        hasPrevious()  判断是否存在上一个元素
        previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素
        next();  先取出当前指针指向的元素,然后指针向下移动一个单位
        add(E e)   把当前有元素插入到当前指针指向的位置上
        set(E e)   替换迭代器最后一次返回的元素
      
     

    import java.util.*;
    
    public class Demo3 {
        
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("李杰");
            list.add("李英");
            list.add("李汉三");
            list.add("李汉斯");
            
            ListIterator it = list.listIterator(); //返回的是一个List接口中特有的迭代器
            /*System.out.println(it.hasPrevious())//判断是否有上一个元素,有true,没有false 
            System.out.println(it.previous());//获取上一个元素
            it.next();
            System.out.println(it.previous());//获取上一个元素 
            
            while(it.hasNext()){
                it.next();
            }
            
            while(it.hasPrevious()){
                System.out.println("元素:"+ it.previous());
            }
            
            it.next();
            it.next();
            it.add("李白");
            */
            it.next();
            it.next();
            it.set("李白");
            
            System.out.println("集合的元素:"+ list);        
        }
    }

    作业: 使用三种方式遍历集合的元素.  
      一、 使用get方法遍历。
      二、 使用迭代器正序遍历。
      三、 使用迭代器逆序遍历。

    import java.util.*;
    public class Demo4 {
        
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add("李杰");
            list.add("李英");
            list.add("李汉三");
    
            for(int i = 0 ; i<list.size() ; i++){
                System.out.print(list.get(i)+",");
            }
            System.out.println();
            ListIterator it = list.listIterator();
            while(it.hasNext()){
                System.out.print(it.next()+",");
            }
            System.out.println();
            while(it.hasPrevious()){
                System.out.print(it.previous()+",");
            }    
        }
    }
  • 相关阅读:
    [心得]如何快速利用SqlMap做安全檢測
    [心得]群裡提問的流水序號產生方式
    STL中使用reverse_iterator时,如何正确使用erase函数
    西山居面试之旅
    LAMP兄弟连 视频教程集
    [译]理解Windows消息循环
    C++设计模式 -- 解析和实现
    winsock 收发广播包
    SqlServer sysobjects_table
    查询反模式
  • 原文地址:https://www.cnblogs.com/JYDesigner/p/9339538.html
Copyright © 2011-2022 走看看