黑馬:集合一

來源:互聯網
上載者:User

1、集合體系概述
為什麼有多種容器:因為存放資料的資料結構不同。
2、Collection集合
方法
第一、add方法的參數類型是Object,以便接受任意類型的對象。
第二、集合中儲存的都是對象的引用(地址)。
第三、什麼就是迭代器?就是集合取出元素的方式。
迭代器原理:
集合把取出方式定義在集合的內部,這樣取出方式就可以直接存取集合內部的元素,那麼取出方式就被定義成了內部類。
而每一個容器的資料結構不同,所以取出的動作細節也不一樣,但是取出動作都有判斷和取出的共同點,那麼這樣就可以抽取出共同點Iterator。
擷取集合的取出對象方法,就是通過集合對外提供一個方法iterator();。
import java.util.*;
public class CollectionDemo{
 public static void main(String[] args){
   method_get();
 }
 public static void method_get(){
   ArrayList a = new ArrayList();
   a.add("java1");
   a.add("java2");
   a.add("java3");
   a.add("java4");
   
   //迭代器第一種方法,迭代器對象用完後不銷毀記憶體不好,但常用。
   Iterator it = a.iterator();
   while(it.hasNext()){//擷取迭代器,用於取出集合中的元素
    sop(it.next()); 
   }
   //迭代器第二種方法,迭代器對象是局部變數,用完後會釋放記憶體。
   for(Iterator it2 = a.iterator();it2.hasNext();){
    sop(it2.next()); 
   }
 }
 public static void method_retain(){
   ArrayList a = new ArrayList();
   a.add("java1");
   a.add("java2");
   a.add("java3");
   a.add("java4");
   
   ArrayList b = new ArrayList();
   b.add("java1");
   b.add("java2");
   b.add("java5");
   //4、取交集,取出相同的
   //a.retainAll(b);
   //5、刪除相同的
   a.removeAll(b);
   
   sop(a);
   sop(b);
 }
 public static void method_base(){
   ArrayList a = new ArrayList();
   //1、添加元素
   a.add("java1");
   a.add("java2");
   
   sop("size:"+a.size());
   sop("原集合:"+a);
   
   //2、刪除元素
   //a.remove("java1");
   //清空集合
   //a.clear();
   
   //3、判斷元素
   sop("java1是否存在:"+a.contains("java1"));
   sop("集合是否為空白?"+a.isEmpty());
   
   sop(a);
 }
 public static void sop(Object obj){
  System.out.println(obj); 
 }
}
3、List特有方法:凡是可以操作角標的方法都是該體系特有的方法。
增:
add(index,element);
addAll(index,Collection);
刪:
remove(index);
改:
set(index,element);
查:
get(index);
subList(from,to);
listIterator();
List特有的迭代器,ListIterator是Iterator的子介面。
4、為什麼在List中用ListIterator迭代器代替Collection中的Iterator迭代器?
第一、Iterator迭代器只有3個方法:hasNext()、next()、remove()方法。沒有增加、修改等方法。當以後程式中需要用到增加元素、修改元素功能時,使用Collection集合中的add()、set()就會出現用集合和迭代器在同時操作對象的情況,這時就會出現ConcurrentModificationException異常。
第二、ListIterator列表迭代器中添加了add()、set()等功能,這樣當使用列表迭代器時,就可以保證不需要集合方法就可以完成所有需要的功能,避免集合和迭代器同時操作一個對象元素的情況。
5、Vector集合中的枚舉
Enumeration en = v.elements();====>Iterator it = a.Iterator();
枚舉就是Vector特有的取出方式。
6、LikedList集合
LinkedList特有方法:
addFirst();
addLast();
removeFirst();
removeLast();
7、ArrayList集合:數組結構
開發中List看需求選擇LinkedList、ArrayList;不過一般用ArrayList,因為開發中查詢多,增刪少。
8、TreeSet集合原理二叉樹

9、List、Set集合

Collection

|---List:元素是有序的(存入和取出的順序一致),元素可以重複,因為該集合體系有索引。

|---ArrayList:底層的資料結構使用的是數組結構。特點:查詢速度快,但是增刪慢。線程不同步。可變長度數組:數組初始化預設長度為10,當長度超過時,50%延長,節約空間。

|---LinkedList:底層的資料結構使用的是鏈表。特點:增刪速度快,查詢慢。

|---Vector:底層的資料結構使用的是數組結構。線程同步。被ArrayList替代了。可變長度數組:數組初始化預設長度為10,當長度超過時,100%延長。

|---Set:元素是無序的(存入和取出的順序不一定一致),元素不可以重複。Set的功能和Collection的功能是一樣的。

|---HashSet:底層資料結構是雜湊表。線程是非同步的。HashSet是如何保證元素唯一性呢?是通過元素的兩個方法,hashCode()和equals()來完成。如果元素的hashCode值相同,才會判斷equals是否為true。如果元素的hashCode值不同,不會調用equals。ArrayList判斷元素是否相同只依賴於equals,Set判斷元素是否相同依賴於hashCode和equals。寫集合時要覆寫hashCode\equals方法。

|---TreeSet:可以對Set集合中的元素進行排序。排序時,當主要條件相同時,一定要判斷一下次要條件。底層資料結構是二叉樹。保證資料元素唯一性的依據:compareTo方法return0,return
-1在二叉樹左邊,return 1在二叉樹右邊。

TreeSet第一種排序方式:讓元素自身具備比較性,元素需要實現Comparable介面,覆蓋compareTo方法。這種方式也稱為元素的自然順序或者叫預設順序。

TreeSet第二種排序方式:當元素自身不具備比較性時,或者具備的比較性不是需要的。這時就讓集合自身具備比較性。在集合初始化時就有了比較方法。定義了比較子,將比較子作為參數傳給TreeSet的建構函式。

當兩種排序都存在時,以第二種方式比較子為準。具體步驟是定義一個類,實現Comparator介面,覆蓋compare方法。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.