List介面的子實現類
list介面三個常用的子實現類:ArrayList,Vector和linkedlist
List集合子類的特點:
1> ArrayList(預設使用此類)
內部是一種陣列實現,查詢快,增刪慢
執行緒不安全,--à不同步-à執行效率高
2>Vector:
底層是一種陣列實現,查詢快,增刪慢
執行緒安全的類,同步-à執行效率低
StringBuffer:執行緒安全的類
3>LinkedList:
底層是一種連結鏈表實現,查詢慢,增刪快,
執行緒不安全,不同步-à執行效率高
一.Arraylist類
遍歷功能:
1)一個是Collection的iterator()
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的特點:元素先進後出