1. 程式人生 > >JAVA高階基礎(4)---List介面

JAVA高階基礎(4)---List介面

List介面

List是有序的 collection(也稱為序列)。此介面的使用者可以對列表中每個元素的插入位置進行精確地控制。使用者可以根據元素的整數索引訪問元素,並搜尋列表中的元素。   

List 集合裡添加了一些根據索引來操作集合元素的方法

    void add(int index, Object ele)
    boolean addAll(int index, Collection eles)
    Object get(int index)
    int indexOf(Object obj)
    int lastIndexOf(Object obj)
    Object remove(int index)
    Object set(int index, Object ele)
    List subList(int fromIndex, int toIndex)

注:更多詳細方法請自行在 API 上查詢

集合遍歷修改的問題

ConcurrentModificationException

當在使用迭代器進行迭代集合的時候,不允許向原集合新增元素,但可以原集合當前元素之後的元素的值

如何解決ConcurrentModificationException?

  1. 使用迭代器進行元素的新增
  2. 不使用迭代器迭代;可以使用for迴圈

 相關程式碼

package org.lanqiao.collection.demo;

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

public class ListDemo {
	public static void main(String[] args) {
		/*
		 * List 集合裡添加了一些根據索引來操作集合元素的方法
			void add(int index, Object ele)
			boolean addAll(int index, Collection eles)
			Object get(int index)
			int indexOf(Object obj)
			int lastIndexOf(Object obj)
			Object remove(int index)
			Object set(int index, Object ele)
			List subList(int fromIndex, int toIndex)
		 */
		//建立List集合
		List list = new ArrayList();
		//新增元素
		list.add("aa");
		list.add("bb");
		list.add("cc");
		//在指定的位置新增元素
		list.add(1, "java");
		List list2 = new ArrayList();
		list2.add("IOS");
		list2.add("android");
		list.addAll(list2);
		list.addAll(0, list2);
		
		//獲取集合中元素的個數
		System.out.println(list.size());
		//list集合的迭代
		Iterator  iter = list.iterator();
		while(iter.hasNext()) {
			System.out.println(iter.next());
		}
		System.out.println("---------------------");
		Object obj = list.get(1);
		System.out.println(obj);
		for(int i = 0; i <list.size();i++) {
			System.out.println(list.get(i));
			
		}
		System.out.println("---------------------");
		int i  = list.indexOf("android");
		System.out.println(i);
		System.out.println("---------------------");
		int i1 = list.lastIndexOf("android");
		System.out.println(i1);
		System.out.println("---------------------");
		list.remove(1);
		for(int k = 0; k <list.size();k++) {
			System.out.println(list.get(k));
			
		}
		System.out.println("---------------------");
		list.set(0, "javase");
		
		for(int k = 0; k <list.size();k++) {
			System.out.println(list.get(k));
			
		}
		System.out.println("---------------------");
		List list3 = list.subList(3, 5);
		for(int m = 0 ; m < list3.size();m++) {
			
			System.out.println(list3.get(m));
		}
		System.out.println("-------ListIterator正向迭代--------------");
		ListIterator listIter = list.listIterator();
		while(listIter.hasNext()) {
			//listIter.next();
			System.out.println(listIter.next());
			
		}
		System.out.println("-------ListIterator逆向迭代--------------");
		while(listIter.hasPrevious()) {
			System.out.println(listIter.previous());
			
		}
		System.out.println("-------ListIterator再次正向迭代--------------");
		while(listIter.hasNext()) {
			Object obje = listIter.next();
			if(obje.equals("java")) {
				//listIter.set("javame");
				//listIter.add("javaee");
				//listIter.previous();
				//list.add("ObjectC");
				//list.set(2, "mmmmm");
				//listIter.previous();
			}
			System.out.println(obje);
			
		}
		System.out.println("-------ConcurrentModificationException--------------");
		for(int x = 0 ; x <list.size();x++ ) {
			Object o = 	list.get(x);
			if(o.equals("java")) {
				list.add(list.indexOf("java") + 1,"python");
				
			}
			System.out.println(o);
			
		}
	}
}