《疯狂Java讲义精粹》读书笔记14 ------ List集合基础

=============《疯狂Java讲义精粹》读书笔记14 ------  List集合基础================

  List集合代表一个元素有序可重复的集合,集合中每个元素都有其对应的顺序索引。List集合默认按元素的添加顺序设置元素的索引,第一个索引默认为0,之后的递增。

  List集合中的常用操作元素的方法:

    · void add(int index, Object element): 将元素element插入到元素的index处;
    · boolean addAll(int index, Collection c): 将集合c 所包含的所有元素都插入到List集合的index处
    · Object get(int index):返回集合index索引处的元素;
    · int indexOf(Object o):返回对象o在List集合中第一次出现位置的索引
    · inr lastIndexOf(Object o):返回对象o在List集合中最后一次出现位置的索引
    · Object remove(int index):删除并返回index所引处的元素
    · Object set(int index, Object element):将index所引处的元素替换成element对象,返回新元素
    · List subList(int fromIndex, int toIndex): 返回[fromIndex, toIndex)所有集合元素组成的子集合

  List判断两个元素相等只需要通过equals()方法比较返回true即可。

下面程序演示了List集合的这种特性用法:

import java.util.ArrayList;

class A{
    public boolean equals(Object obj){
        return true;
    }
}

public class TestList {
    public static void main(String[] args) {
        ArrayList as = new ArrayList();
        as.add(new String("Cocoon"));
        as.add(new String("Fan"));
        as.add(new String("cnblogs"));
        
        System.out.println(as);
        
        //删除元素中的对象,将导致删除第一个元素
        as.remove(new A());
        System.out.println(as);
        
        //再次删除第一个元素
        as.remove(new A());
        System.out.println(as);
    }
}

将会看到如下结果:

[Cocoon, Fan, cnblogs]
[Fan, cnblogs]
[cnblogs]

  从上面的结果可以看出,程序试图删除一个A对象,List将会调用该A对象的equals()方法一次与几何元素进行比较,如果该方法返回true则删除该索引对应的元素值。

  当List调用set()方法来改变List集合指定索引处的元素时,指定的索引必须是List的有效索引。

  List还额外提供了一个listiterator()方法,该方法返回一个ListIterator对象,ListIterator继承了Iterator接口,提供了专门操作List的方法:
    · boolean hasPrevious(): 返回该迭代器关联的集合是否还有上一个元素
    · Object previous():返回该迭代器的上一个元素
    · void add(): 在指定位置插入一个元素

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

public class TestList {
    public static void main(String[] args) {
        ArrayList as = new ArrayList();
        as.add(new String("Cocoon"));
        as.add(new String("Fan"));
        as.add(new String("cnblogs"));
        
        //System.out.println(as);
        
        //使用迭代器遍历集合元素
        ListIterator lit = as.listIterator();
        while(lit.hasNext()){
            System.out.println(lit.next());
            lit.add("**分隔符**");
        }
        
        //反向输出
        System.out.println("\n======反向输出======");
        while(lit.hasPrevious()){
            System.out.println(lit.previous());
        }
    }
}

输出结果:

Cocoon
Fan
cnblogs

======反向输出======
**分隔符**
cnblogs
**分隔符**
Fan
**分隔符**
Cocoon

 

 

 

posted @ 2013-03-12 00:50  Cocoon  阅读(242)  评论(0编辑  收藏  举报