1. 程式人生 > >集合(3)——List集合

集合(3)——List集合

null 叠代器 lam 代碼 get 法則 -c public 重復元素

List集合

List集合代表一個元素有序,可重復的集合,集合中每個元素都有其對應的順序索引.List集合允許使用重復元素,可以通過索引來訪問指定位置的集合元素。List集合允許使用重復元素,可以通過索引來訪問指定位置的集合元素。List集合默認按元素的添加順序設置元素的索引,例如第一次添加的元素索引為0,第二次添加的元素索引為1.

1.List接口和ListIterator接口

List作為Collection的子接口,當然可以使用Collection接口裏的全部方法,而且由於List是有序集合,因此List集合中添加了一些根據索引來操作集合元素的方法。

void add(int index,Object element):將元素element插入到List集合的index處。

boolean addAll(int index,Collection c):將集合c所包含的所有元素都插入到List集合的index處。

Object get(int index):返回集合index索引處的元素。

int indexOf(Object o):返回對象o在List集合中第一次出現的位置索引。

int 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處所有集合元素組成的子集合。

void replaceAll(UnaryOperator operator):根據operator指定的計算規則重新設置List集合的所有元素。

void sort(Comparator c):根據Comparator參數對List集合的元素排序。

import java.util.*;

public class ListTest
{
    public static void main(String[] args) {
        List
<String> books = new ArrayList<String>(); //向books集合中添加三個元素 books.add(new String("龍珠")); books.add(new String("犬夜叉")); books.add(new String("網球王子")); books.add(null); System.out.println(books); //將新字符串對象插入在第二個位置 books.add(1, new String("海賊王")); for(int i = 0; i < books.size(); i++){ System.out.println(books.get(i)); } //刪除第三個元素 books.remove(2); System.out.println(books); //判斷指定元素在List集合中的位置:輸出1,表明位於第二位 System.out.println(books.indexOf(new String("海賊王"))); //將第二個元素替換成新的字符串對象 books.set(1,new String("海賊王")); System.out.println(books); //將books集合的第二個元素(包括)到第三個元素(不包括)截取成子集合 System.out.println(books.subList(1,2)); } }

測試結果:

技術分享圖片

註意:List判斷兩個對象是否相等的標準,只要兩個對象通過equals()方法返回true即可。

import java.util.*;
class A{
    public boolean equals(Object obj) {
        return true;
    }
}

public class ListTest2{
    public static void main(String[] args) {
        List<Object> list = new ArrayList<Object>();
        list.add(new String("龍珠"));
        list.add(new String("棋魂"));
        list.add(new String("遊戲王"));
        System.out.println(list);
        //list刪除一個A對象,將list中的第一個元素刪除
        list.remove(new A());
        System.out.println(list);
        //將再次刪除第一個元素
        list.remove(new A());
        System.out.println(list);
    }
}

測試結果:

技術分享圖片

通過上面這段代碼可以看出,List集合是通過equals()方法判斷兩個元素是否相同。

Java8為List集合增加了sort()和repalceAll()兩個常用的默認方法,其中sort()方法需要一個Comparator對象來控制元素排序,程序可使用Lambda表達式來作為參數;而replaceAll()方法則需要一個UnaryOperator來替換所有集合元素,UnaryOperator也是一個函數式接口,因此程序也可使用Lambda表達式作為參數。

import java.util.*;

public class ListTest3{
    public static void main(String[] args) {
        List<Object> list = new ArrayList<Object>();
        list.add("死神");
        list.add("海賊王");
        list.add("灌籃高手");
        list.add("進擊的巨人");
        list.add("鋼之煉金術師");
        list.add("棋魂");
        //將list按字符串長度順序排序
        list.sort((o1,o2) -> ( ((String)o1).length() - ((String)o2).length()));
        System.out.println(list);
        //將list集合中的字符串替換成對應的字符串長度
        list.replaceAll(ele -> (((String)ele).length()));
        System.out.println(list);
    }
}

測試結果:

技術分享圖片

上面程序對List集合進行了排序,傳給sort()方法的Lambda表達式指定的排序規則是:字符串長度越長,字符串越大。

與Set只提供了一個iterator()方法不同,List還額外提供了一個listIterator()方法,該方法返回一個ListIterator對象,ListIterator接口繼承了Iterator接口,提供了專門操作List的方法。ListIterator接口在Iterator接口基礎上增加了如下方法:

boolean hasPrevious():返回該叠代器關聯的集合是否還有上一個元素

Object previous():返回該叠代器的上一個元素。

void add(Object o):在指定位置插入一個元素。

import java.util.*;

public class ListIteratorTest{
    public static void main(String[] args) {
        String[] arr = {"龍珠","犬夜叉","遊戲王","海賊王","死神","灌籃高手"};
        List<String> list = new ArrayList<String>();
        for(int i = 0; i < arr.length; i++) {
            list.add(arr[i]);
        }
        ListIterator lit = list.listIterator();
        while(lit.hasNext()) {
            System.out.println(lit.next());
        }

        //開始反向遍歷
        System.out.println("===================");
        while(lit.hasPrevious()) {
            System.out.println(lit.previous());
        }

    }
}

測試結果:

技術分享圖片

集合(3)——List集合