【CXY】JAVA基礎 之 List

概述:

    1.有序的(序號(索引)的序,不是順序的序,相對Set對比產生的說法),可重複集合

    2.List是Collection的子接口,所以List可以使用Collection全部方法。(見本人博客相關文章)

    3.除此之外List還有自己特殊的方法,索引相關的操作(本文重點做這部分的介紹)

    4.刪除的時候防止 躺着中槍   

    5.ListIterator:專門操作list的迭代器(本例未做詳解,有興趣請看api)

    6.兩個基本實現類 ArrayList(非線程安全) 和 Vector(線程安全)

       1.Vector是一個古老的遺留類(性能差),不推薦使用。

       2.Vector(Stack) 棧數據結構,使用LinkedList代替

    7.Arrays.ArrayList是一個長度固定的List,只能遍歷不能 操作

    8.LinkedList

       1.可以用來做雙端隊列和棧

       2.由於以鏈表形式保存,所以隨機訪問性能較差,但是迭代,插入、刪除的性能比較好,因爲可以直接改變指針所指地址(數據結構知識)

package com.cxy.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @author cxy
 */
public class ListTest
{
	public static void main(String[] args)
	{
		List l=new ArrayList();
		l.add("幼兒園");
		l.add("小學");
		l.add("幼兒園");
		l.add("中學");
		l.add("大學");
		System.out.println(l);  //可以看出可以有重複數據
		
		System.out.println("索引爲3的元素是:"+l.get(3));
		
		System.out.println("幼兒園第一次出現的索引:"+l.indexOf("幼兒園"));
		System.out.println("幼兒園第最後一次出現的索引:"+l.lastIndexOf("幼兒園"));
		
		l.set(3, "初中");  //類似修改操作 
		l.add(4,"高中");   //插入
		System.out.println(l);
		
		l.remove("幼兒園"); //會刪除第一個找到的 幼兒園
		System.out.println(l);
		l.remove(new AA()); //由於AA的equals方法返回true,導致第一個元素被誤認爲是和AA相等的,於是躺着就中槍了
		System.out.println(l);
		l.remove(new BB()); //BB的equals方法返回false,所以List沒有找到相等的元素刪除。
		System.out.println(l);
		l.remove(0);  //通過序號刪除
		System.out.println(l);
		
		ArrayList l1=new ArrayList();
		l1.ensureCapacity(64); //大的數據集合,使用這個方法一次分配好空間,避免頻繁多次分配,提高性能
		l1.trimToSize();  //調整至使用空間大小,避免內存浪費。
		
		try
		{
			List temp = Arrays.asList("小學","中學","大學");
		    temp.remove(0);
		}catch(Exception e)
		{
			System.out.println("temp是一個固定長度的list,只能遍歷不能操作");
		}
		
		LinkedList ll = new LinkedList();
		ll.add("aaa");
		ll.add("bbb");
		ll.add("ccc");
		ll.add("ddd");
		System.out.println("原始:"+ll);
		ll.addLast("zzz");  //隊列--入隊
		ll.removeFirst(); //隊列--出隊
		System.out.println("隊列操作:"+ll);
		ll.addFirst("kkk"); //棧--入棧
		System.out.println("kkk入棧:"+ll);
		ll.removeFirst(); //棧--出棧
		System.out.println("kkk出棧:"+ll);
		ll.removeLast();  //體現雙端隊列
		System.out.println("=========================");
		ll = new LinkedList();
		ll.add("aaa");
		ll.add("bbb");
		ll.add("ccc");
		ll.add("ddd");
		System.out.println("重新初始化:"+ll);
		ll.push("kkk");  //棧--入棧
		System.out.println("kkk入棧:"+ll);
		ll.pop();  //棧--出棧
		System.out.println("kkk出棧:"+ll);
		
		ll.offer(""); //隊列--入隊
		ll.offerFirst("");  //返回true的addFirst
		ll.offerLast("");  //返回true的addLast
		
		ll.poll(); //獲取並刪除第一個
		ll.pollFirst();  //獲取並刪除第一個
		ll.pollLast();  //獲取並刪除最後一個
		
		ll.peekFirst(); //獲取不刪除第一個
		ll.peekLast();  //獲取不刪除最後一個
		
		ll.removeFirstOccurrence("aaa"); //刪除第一個出現的aaa
		ll.removeLastOccurrence("aaa"); //刪除最後一個出現的aaa
	}
}


class AA
{
	@Override
	public boolean equals(Object obj)
	{
		return true;
	}
}

class BB
{
	@Override
	public boolean equals(Object obj)
	{
		return false;
	}
}

相關文章連接:

《JAVA基礎 之 Collection》

《JAVA基礎 之 Set》

 

聲明:

1.原創文章,轉載請標明並加本文連接。

2.更詳盡的API請參見  http://docs.oracle.com/javase/7/docs/api/

3.文章反映個人愚見,如有異議歡迎討論指正 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章