
1.什么是Lsit集合?
List集合是一種元素有序的,可重復的集合,集合中每個元素都有自己的元素索引。List集合允許可重復的元素,可以通過索引來訪問指定位置的元素。
2.Java8改進的List接口和ListIterator接口
List作為Collection集合的子接口,可以使用Collection接口的全部方法。另外,由于List是有序集合,又添加了根據索引來操縱List集合的一些方法。
void add(int index, Object element): 將元素element添加到List集合索引index處。
boolean addAll(int index, Collection c): 將Collection集合中的所有元素插入到List集合的index處。
Object get(int index): 返回索引index處的元素。
int indexOf(Object o): 返回元素o在list集合中第一次出現的位置索引。
int lastIndexOf(Object o): 返回元素o在List集合中最后一次出現的位置索引。
Object set(int index, Object element): 將位置索引為index的元素,替換為element。
List subList(int fromIndex, int toIndex): 返回List集合中從索引fromIndex到索引toIndex之間的所有元素。
java8為List集合添加了如下兩個默認方法:
void replaceAll(UnaryOperator operator): 根據operator指定的計算規則來重新設置List集合的所有元素。
void sort(Comparator c):根據Comparator參數對List集合的元素排序。
public class ListTest { public static void main(String[] args){ List s = new ArrayList(); s.add(new String("春")); s.add(new String("秋")); s.add(new String("冬")); //輸出:[春, 秋, 冬] System.out.PRintln(s); s.add(1, new String("夏")); s.remove(2); //輸出:[春, 夏, 冬] System.out.println(s); //輸出:1 System.out.println(s.indexOf(new String("夏"))); s.set(1, new String("秋")); //輸出:[春, 秋, 冬] System.out.println(s); //輸出:[秋] //包括fromIndex本身,但不包括toFrom本身 System.out.println(s.subList(1, 2)); }}public class ListTest0 { public static void main(String[] args){ List books = new ArrayList(); books.add(new String("輕量級java EE 企業應用開發")); books.add(new String("瘋狂 java講義")); books.add(new String("瘋狂Android講義")); books.add(new String("瘋狂ios講義")); //使用目標類型為Comparator的Lambda表達式來對List集合排序 books.sort((o1,o2) -> ((String)o1).length() - ((String)o2).length()); //輸出:[瘋狂ios講義, 瘋狂 java講義, 瘋狂Android講義, 輕量級java EE 企業應用開發] System.out.println(books); books.replaceAll(ele -> ((String)ele).length()); //輸出:[7, 9, 11, 17] System.out.println(books); }}3.ArrayList和Vector實現類
ArrayList和Vector類都是基于數組實現的List類,所以ArrayList和Vector類封裝了一個動態的,允許在分配的Object[]數組。ArrayList和Vector對象使用initialCapacity參數來設置數組的長度,當向Arraylist或Vector添加的元素超出數組的長度時,它們的initialCapacity會自動增加。
ArrayList和Vector提供了兩個方法來重新分配Object[]數組:
void ensureCapacity(int minCapacity):將ArrayList或Vector集合的Object[]數組長度增加大于或等于minCapacity值。
void trimToSize():調整ArrayList或Vector集合的Objec[]數組長度為當前元素的個數。調用該方法可減少ArrayList或Vector集合對象占用的存儲空間。
ArrayList和Vecto在用法上幾乎完全相同,但由于Object[]是一個古老的集合(JDK1.0就有了),所以Vector在早些時候提供了很多方法名很長的方法,Vector中方法名很短的方法都是后來新增的。
ArrayList和Vector的顯著區別是:ArrayList是線程不安全的,當多個線程訪問同一個ArrayList集合時,如果有超過一個線程修改了ArrayList集合,則程序必須手動保證該集合的同步性。但Vector是線程安全的,無需保證集合的同步性。因為Vector是線程安全的,所以Vector的性能要比ArrayList集合的性能要低。實際上,即使需要保證List集合的線程安全,也同樣不推薦使用Vector。
4.固定長度的List
有一個操縱數組的工具類Arrays,該工具類提供了asList(Object... a)方法,該方法可以將一個數組或者指定個數的對象轉換為一個List集合,這個List集合既不是ArrayList實現類的實例,也不是Vector的實例類,而是arrays的內部類ArrayList的實例。
Arrays.ArrayList是一個固定長度的List集合,程序只能遍歷訪問該集合中的元素,不可增加,刪除該集合中的元素。
public class FixedsizeList { public static void main(String[] args){ List fixedList = Arrays.asList("瘋狂java講義", "瘋狂ios講義"); //獲取fixedList的實現類 //輸出:class java.util.Arrays$ArrayList System.out.println(fixedList.getClass()); //輸出:瘋狂java講義 // 瘋狂ios講義 fixedList.forEach(System.out::println); //試圖添加,刪除元素會引發UnsupportedOperationException異常 //fixedList.add("瘋狂Android講義"); }}新聞熱點
疑難解答