五、集合——4-List集合

4-List集合

  List集合代表一个元素有序,可重复的集合,集合中的每个元素都有与其对应的索引(类似于数组)。

1.List接口和ListIterator接口

list接口:

(1)List接口继承了Collection接口,所以可以使用Collection接口中的所有方法,同时,由于List是有序集合,有索引,所以增添了几个根据索引来操作集合元素的方法:

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        //创建List集合
        List list = new ArrayList();
        //向list中添加元素
        list.add(new String("a"));
        list.add(new String("b"));
        list.add(new String("c"));
        list.add(new String("d"));
        //将新的字符串对象插入到索引为1处,之后元素向后移动
        list.add(1,new String("e"));
        System.out.println(list);
        //删除第二个元素 remove()方法的参数也可以是一个对象的引用,每次删除List集合中第一个与其相等的元素
        list.remove(1);
     list.remove("b"); System.out.println(list);
//获取指定元素的索引 System.out.println(list.indexOf("c")); //替换指定索引处的元素 list.set(1,"a"); System.out.println(list); //截取子集合 list = list.subList(0, 2); //不包括索引为2的元素 System.out.println(list); } }

 

 

 

(2)判断两个List中的元素是否相等,只要通过equals()方法进行比较即可;

(3)每次从集合中删除一个对象时,总是删除List集合中第一个与其相等的对象;

(4)List中的其他方法:

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.function.UnaryOperator;

public class ListTest2 {
    public static void main(String[] args) {
        //sort()方法
        //用于对List集合进行排序
        List list = new ArrayList();
        list.add(2);
        list.add(1);
        list.add(3);
        list.add(5);
        list.add(4);
        System.out.println(list); //输出2 1 3 5 4
        list.sort(new Comparator(){

            @Override
            public int compare(Object o1, Object o2) {
                // TODO Auto-generated method stub
                Integer a = (Integer)o1;
                Integer b = (Integer)o2;
                return a-b;
            }});
        System.out.println(list);
        //因为Comparator接口是一个函数式接口,所以可以是使用Lambda表达式
        list.sort((o1,o2)->((Integer)o1-(Integer)o2));
        System.out.println(list);
    }
}

 

ListIterator接口:

(1)ListIterator接口继承了Iterator接口,提供了专门用于操作List集合的方法;

(2)ListIterator接口的使用:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListIteratorTest {
    public static void main(String[] args) {
        String[] stus = {
            "Abb",
            "Bca",
            "Cad",
            "Cba"
        };
        List list = new ArrayList();
        //插入元素
        for(int i=0;i<stus.length;i++){
            list.add(stus[i]);
        }
        ListIterator lt = list.listIterator();
        //正常迭代
        while(lt.hasNext()){
            System.out.println(lt.next());
            //ListIterator提供了add()方法为集合添加元素
            lt.add("aaaaaa");
        }
        //反向迭代
        while(lt.hasPrevious()){
            System.out.println(lt.previous());
        }
    }
}

 

 

 

 

2.ArrayList和Vector实现类

(1)ArrayList和Vecter都是基于数组实现的两个List类,他们分配了一个动态的允许再分配的Object[]数组,他们使用参数initialCapacity来设置数组的长度,当向ArrayList或者Vector中谈价元素时,这个参数会自动增加;

(2)可以通过ensureCapaCity(int minCapacity)的方法一次性的增加initialCapacity参数,避免增加重分配Object[]的次数来提高性能;

(3)如果创建一个空的ArrayList或者Vector,不指定他们的initailCapacity参数,则Object[]默认的长度为0;

(4)ArrayList是非线程安全的,而Vector是线程安全的,但是不建议使用Vector,而是使用Collections工具类让ArrayList集合成为一个线程安全的集合;

3.固定长度的List

(1)Arrays.ArrayList是一个固定长度的List,这个List不是集合框架中的List而是在Arrays工具类中内部类ArrayList的实例。这是一个长度固定的List集合,程序只能遍历访问该集合中的元素,而不能进行其中的元素操作。

 

posted @ 2017-08-02 19:58  丶theDawn  阅读(189)  评论(0编辑  收藏  举报