JAVA基礎(chǔ) 之 List
概述:
1.有序的(序號(索引)的序,不是順序的序,相對Set對比產(chǎn)生的說法),可重復(fù)集合
2.List是Collection的子接口,所以List可以使用Collection全部方法。(見本人博客相關(guān)文章)
3.除此之外List還有自己特殊的方法,索引相關(guān)的操作(本文重點做這部分的介紹)
4.刪除的時候防止 躺著中槍
5.ListIterator:專門操作list的迭代器(本例未做詳解,有興趣請看api)
6.兩個基本實現(xiàn)類 ArrayList(非線程安全) 和 Vector(線程安全)
1.Vector是一個古老的遺留類(性能差),不推薦使用。
2.Vector(Stack) 棧數(shù)據(jù)結(jié)構(gòu),使用LinkedList代替
7.Arrays.ArrayList是一個長度固定的List,只能遍歷不能 操作
8.LinkedList
1.可以用來做雙端隊列和棧
2.由于以鏈表形式保存,所以隨機(jī)訪問性能較差,但是迭代,插入、刪除的性能比較好,因為可以直接改變指針?biāo)傅刂罚〝?shù)據(jù)結(jié)構(gòu)知識)
Java代碼:
- 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("小學(xué)");
- l.add("幼兒園");
- l.add("中學(xué)");
- l.add("大學(xué)");
- System.out.println(l); //可以看出可以有重復(fù)數(shù)據(jù)
- System.out.println("索引為3的元素是:"+l.get(3));
- System.out.println("幼兒園第一次出現(xiàn)的索引:"+l.indexOf("幼兒園"));
- System.out.println("幼兒園第最后一次出現(xiàn)的索引:"+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,導(dǎo)致第一個元素被誤認(rèn)為是和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); //大的數(shù)據(jù)集合,使用這個方法一次分配好空間,避免頻繁多次分配,提高性能
- l1.trimToSize(); //調(diào)整至使用空間大小,避免內(nèi)存浪費。
- try
- {
- List temp = Arrays.asList("小學(xué)","中學(xué)","大學(xué)");
- 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(); //體現(xiàn)雙端隊列
- 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"); //刪除第一個出現(xiàn)的aaa
- ll.removeLastOccurrence("aaa"); //刪除最后一個出現(xiàn)的aaa
- }
- }
- class AA
- {
- @Override
- public boolean equals(Object obj)
- {
- return true;
- }
- }
- class BB
- {
- @Override
- public boolean equals(Object obj)
- {
- return false;
- }
- }
擴(kuò)展閱讀:JAVA基礎(chǔ) 之 Set JAVA基礎(chǔ) 之 Collections