1. 程式人生 > >List介面的子實現類

List介面的子實現類

list介面三個常用的子實現類:ArrayListVectorlinkedlist

List集合子類的特點:

  1> ArrayList(預設使用此類)

    內部是一種陣列實現,查詢快,增刪慢

    執行緒不安全,--à不同步-à執行效率高

2>Vector:

    底層是一種陣列實現,查詢快,增刪慢

    執行緒安全的類,同步-à執行效率低

            StringBuffer:執行緒安全的類

3>LinkedList:

    底層是一種連結表實現,查詢慢,增刪快,

    執行緒不安全,不同步-à執行效率高

一.Arraylist

 

  遍歷功能:

  1)一個是Collectioniterator()

  2)size()get(int index)普通for迴圈

舉例:

1. package org.westos_04;  

2. import java.util.ArrayList;  

3. import java.util.Iterator;  

4. import java.util.List;    

5. import java.util.concurrent.SynchronousQueue;    

6. public class ListTest3 {          

7.   

8.        publicstatic void main(String[] args) { 

9.               //建立集合物件    

10.               Listlist = new ArrayList()   ;                    

11.               //建立4個學生物件    

12.               Students1 = new Student("高圓圓", 27) ;    

13.               Students2 = new Student("趙又廷", 30) ;    

14.               Students3 = new Student("文章", 29) ;    

15.               Students4 = new Student("馬伊琍", 39) ;    

16.               list.add(s1);    

17.               list.add(s2);    

18.               list.add(s3);    

19.               list.add(s4);                   

20.               //方式1:獲取迭代器的方式    

21.               Iteratorit = list.iterator() ;    

22.               while(it.hasNext()){    

23.                     Students = (Student)it.next;                           

24.                      System.out.println(s.getName()+"---"+s.getAge());    

25.               }                   

26.               System.out.println("--------------------------");            

                 

27.               //方式2:size()和get(intindex)結合: 普通for迴圈    

28.               for(intx =0 ;x < list.size() ; x ++) {    

29.                      Students = (Student)list.get(x) ;    

30.                      System.out.println(s.getName()+"---"+s.getAge());    

31.               }    

32.        }      

33. }  
這裡我們需要注意一個問題,我們舉例說明

例題

需求:給集合中新增重複的元素(字串型別),將重複的元素從集合去除掉!

分析:

1)建立一箇舊集合,新增重複元素

2)建立一個新集合

  3)遍歷舊集合中的元素獲取到每一個元素

在舊集合中判斷新集合中是否包含舊集合中的元素

  包含,不搭理

  不包含,新增到新集合中

4) 遍歷新集合

public class ArrayListTest {

public static void main(String[] args) {

//建立一個集合

ArrayList list = new ArrayList() ;

//新增元素

list.add("hello") ;

list.add("world") ;

list.add("java") ;

list.add("javaee") ;

list.add("hello") ;

list.add("world") ;

list.add("hello") ;

list.add("javaee") ;

list.add("android") ;

list.add("python") ;

list.add("php") ;

list.add("php") ;

//建立一個新的集合

ArrayList newList = new ArrayList() ;

//遍歷舊集合

Iterator it = list.iterator() ;

while(it.hasNext()) {

String s = (String) it.next() ;

//判斷新集合中是否包含舊集合中的元素

if(!newList.contains(s)) {

newList.add(s) ;

}

}

//遍歷新集合

Iterator it2 = newList.iterator() ;

while(it2.hasNext()) {

String s = (String) it2.next() ;

System.out.println(s);

}

}

需求:使用集合ArrayList儲存自定義物件(Student),去除重複的物件

 問題:按照儲存字串(新建集合的思想)的形式來去儲存自定義物件,發現自定義物件並沒有去重,為什麼?

   contains方法底層依賴於equals方法

  equals方法預設比較的是地址值,如果想讓equals()方法比較他們的內容是否相同,需要重寫equals(),

 也就意味著儲存自定義類,必須重寫

  equals()方法,這樣才能比較的是這些物件的內容是否相同

public class ArrayListTest3 {

 

public static void main(String[] args) {

//建立一個ArrayList集合

ArrayList array = new ArrayList() ;

//建立4個學鎖物件

Student s1 = new Student("高圓圓", 27);

Student s2 = new Student("文章", 29);

Student s3 = new Student("王力巨集", 30);

Student s4 = new Student("高圓圓", 27);

Student s5 = new Student("高圓圓", 29);

array.add(s1) ;

array.add(s2) ;

array.add(s3) ;

array.add(s4) ;

array.add(s5) ;

//建立一個新集合

ArrayList newArray = new ArrayList() ;

//遍歷舊集合

Iterator it = array.iterator() ;

while(it.hasNext()) {

Student s = (Student)it.next() ;

//判斷,新集合中是否包含

if(!newArray.contains(s)) {

newArray.add(s) ;

}

}

//遍歷新集合

Iterator it2 = newArray.iterator() ;

while(it2.hasNext()) {

Student s= (Student)it2.next();

System.out.println(s.getName()+"---"+s.getAge());

}

}

}

二.Vector

 特有功能:

1>public void addElement(Object obj)------->add(Object obj)

2>public Enumeration elements():返回此向量的列舉

--->相當於:public Iterator iterator()

3>boolean hasMoreElements()  --->boolean hasNext() ;

4>Object nextElement()   --->Object next() ;

 舉例:

public class VectorDemo {

public static void main(String[] args) {

//建立集合物件

Vector v = new Vector() ;

//新增元素

v.addElement("hello");

v.addElement("world");

v.addElement("java");

//遍歷

//獲取Enumeration :向量的列舉

Enumeration en = v.elements() ;

while(en.hasMoreElements()) {

String s = (String)en.nextElement() ;

System.out.println(s);

}

}

}

三. LinkedList

特有功能:

  新增功能

  addFirst(Object e):將指定的元素插入到列表的開頭

  addLast(object e):將指定的元素新增到列表末尾

  獲取功能:

  getFirst():獲取列表第一個元素

  getLast():獲取列表最後一個元素

  刪除功能

  public Object removeFirst()移除並返回此列表的第一個元素。

  public Object removeLast()移除並返回此列表的最後一個元素

舉例:

public class LinkedListDemo {

public static void main(String[] args) {

//建立LinkedList集合物件

LinkedList link = new LinkedList() ;

//新增元素

link.add("hello");

link.add("world");

link.add("java");

System.out.println("link:"+link);

//addFirst(Object e):將指定的元素插入到列表的開頭

link.addFirst("android");

System.out.println("link:"+link);

link.addLast("mysql");

System.out.println(link);

//getFirst():獲取列表第一個元素

System.out.println(link.getFirst());

System.out.println(link.getLast());

//public Object removeFirst()移除並返回此列表的第一個元素。

System.out.println("removeFirst():"+link.removeFirst());

System.out.println(link);

//public Object removeLast()移除並返回此列表的最後一個元素。

System.out.println(link.removeLast());

}

}

可總結出linkedlist的特點:元素先進後出