Java 集合类学习之List

List 是Collection的子类,除了有Collection的方法以外,还有自己的方法

package com.fish.list;
import java.util.ArrayList;
import java.util.List;
/*
 集合的体系:
 
 ----------| Collection 单列集合的根接口
 --------------|  List  如果是实现了List接口的集合类,该集合类具备的特点:有序,可重复。
 --------------|  Set   如果是实现了Set接口的集合类,该集合类具备的特点:无序,不可重复。
有序: 集合的有序不是指自然顺序,而是指添加进去的顺序与元素出来的顺序是一致的。

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() 
 
*/

public class Demo1 {

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        list.add("赵六");
        System.out.println("集合的元素:"+ list);
    }
}
package com.fish.list;
import java.util.ArrayList;
import java.util.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) 


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

ctrl + shift + /  添加多行注释
ctrl  + shift + \  取消多行注释.

*/


public class Demo2 {
    public static void main(String[] args) {
        List list=  new ArrayList();
        list.add("狗娃");
        list.add("狗剩");
        list.add("铁蛋");  //把元素添加到集合的末尾处。
        list.add("狗娃");
        /*
        //添加方法
        list.add(1, "李四"); // 把元素添加到集合中的指定索引值位置上。
        List list2 = new ArrayList();
        list2.add("王五");
        list2.add("赵六");
        list.addAll(2,list2); //把list2的元素添加到list集合指定索引值的位置上。
         */
         
        /*
        //获取的方法 
        System.out.println("get方法获取元素:"+list.get(1)); //根据索引值获取集合中的元素使用get方法遍历集合的元素:
        
        for (int i = 0; i < list.size() ; i++) {
            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.set(3, "韩梅梅"); //使用指定的元素替换指定索引值位置的元素。
        System.out.println("集合的元素:"+list);
    }
}


package com.fish.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
/*
迭代
listIterator() 
ListIterator特有的方法:
添加:
hasPrevious()  判断是否存在上一个元素。
previous()    当前指针先向上移动一个单位,然后再取出当前指针指向的元素。
next();  先取出当前指针指向的元素,然后指针向下移动一个单位。
---------------------------
add(E e)   把当前有元素插入到当前指针指向的位置上。
set(E e)   替换迭代器最后一次返回的元素。
*/
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());
        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);
    }
}
package com.fish.list;
import java.util.List;
import java.util.ArrayList;
import java.util.ListIterator;

/*
练习: 使用三种方式遍历集合的元素. 
第一种: 使用get方法遍历。
第二种: 使用迭代器正序遍历。
第三种: 使用迭代器逆序遍历。
*/

public class Demo4 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        
        System.out.println("======get方法遍历=======");
        for(int i = 0 ; i<list.size() ; i++){
            System.out.print(list.get(i)+",");
        }
        
        System.out.println("\r\n======使用迭代器正序遍历==========");
        ListIterator it = list.listIterator();//获取到迭代器
        while(it.hasNext()){
            System.out.print(it.next()+",");
        }
        
        System.out.println("\r\n======使用迭代器逆序遍历==========");
        while(it.hasPrevious()){
            System.out.print(it.previous()+",");
        }
    }
}


package com.fish.list;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/*
 
迭代器在变量元素的时候要注意事项: 在迭代器迭代元素的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
 
如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
 
迭代元素的过程中: 迭代器创建到使用结束的时间。不只是指循环的时候
 
 */
 
 
public class Demo5 {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        
        ListIterator it = list.listIterator();//获取到迭代器
        
        /*
        while(it.hasNext()){
        System.out.print(it.next()+",");
        //it.add("aa"); // 把元素添加到当前指针指向位置,指针并向下移动一次,不会出现死循环
        list.add("aa");  // add方法是把元素添加到集合的末尾处的。会有ConcurrentModificationException
        //list.remove("张三"); //删除指定的元素,也会ConcurrentModificationException
        //list.set(1,"李雷") //修改list的个数不会报错,就是不能添加和删除
        }
        */
        
        list.add("aa"); //改变了集合元素,后面不能在出现迭代器语句
        it.next(); //有问题,这句代码会报ConcurrentModificationException错
        System.out.println("\r\n集合的元素:"+ list);
    }
}


本文出自 “小鱼的博客” 博客,谢绝转载!

你可能感兴趣的:(java)