Java學習----Collection\Map總結

集合(用於存放引用類型的數據,可變長的數組)

 

由圖可見集合分爲2大類型,單列集合(collection)與雙列集合(Map)

其中單列集合又可分爲2大類,既list和Set

其中list屬於可重複集合,而且有索引,可以根據集合的下標去獲取當前位置的元素

(使用時需要保證該下標的存在否則會報錯)

java.lang.IndexOutOfBoundsException    下標越界異常 ----屬於運行時異常

list集合

list集合的特點

  1. 可重複
  2. 有序(添加順序和取出順序相同)
  3. 可索引

 

list又細分爲ArrayLiSt和LinkedList

ArrayList底層爲數組結構   查詢快、增刪慢

LinkedList   底層是鏈表結構    查詢慢、增刪快

 

list中的主要方法

add(要添加的元素);

add(int index,要添加的元素)   在指定位置,添加元素

addAll(Collection<?>())    將collection集合的元素全部添加

remove(int index)    刪除指定位置的元素

remove(Object o)    刪除指定的元素

removeAll(Collection<?> c)   刪除列表中的指定集合

contains(Object o)      判斷集合中是否包含元素o

size()      返回集合的大小

 

4種list集合的遍歷

1.創建集合

list<String> a=new ArrayList<>();

  1. 集合中添加元素
    a.add("dada");
    a.add("ggg");
    a.add("tt");

for循環遍歷
for (int i = 0; i <a.size(); i++) {
    System.out.println(a.get(i));
}
增強for循環遍歷
for (String str:a) {
    System.out.println(str);
}

迭代器遍歷
Iterator it=a.iterator();
while (it.hasNext()){
    Object next = it.next();
    System.out.println(next);
}

列表迭代器(在迭代器遍歷的同時允許對迭代器進行操作)
    ListIterator<String> it =s.listIterator();
    while(it.hasNext()){
        String next = it.next();
        System.out.println(next);
        if(next.equals("tt")){
            a.add("qq");

//此處未迭代器修改,不是集合修改        }
    }

System.out.println(s);
}

 

LinkedList特有的方法:

public void addFirst(E e) 在該列表開頭插入指定的元素

public void addLast(E e) 將指定的元素追加到此列表的末尾

public E getFirst() 返回此列表中的第一個元素

public E getLast() 返回此列表中的最後一個元素

public E removeFirst() 從此列表中刪除並返回第一個元素

public E removeLast() 從此列表中刪除並返回最後一個元素

 

Set集合

Set集合的特點

  1. 元素存取無序
  2. 沒有索引
  3. 不能存儲重複元素

 

Set中的主要方法

add(要添加的元素);

add(int index,要添加的元素)   在指定位置,添加元素

addAll(Collection<?>())    將collection集合的元素全部添加

remove(int index)    刪除指定位置的元素

remove(Object o)    刪除指定的元素

removeAll(Collection<?> c)   刪除列表中的指定集合

contains(Object o)      判斷集合中是否包含元素o

size()      返回集合的大小

 

2種Set集合的遍歷

Set<String> s =new HashSet<>();
s.add("String");
s.add("aaa");
s.add("bbb");
//遍歷1
for (String d: s) {
     System.out.print(d);
}
System.out.println("-------------------");
//遍歷2
Iterator it =s.iterator();
while (it.hasNext()){
     System.out.print(it.next());
}

HashSet集合的特點

      1.底層是哈希表結構

       2.元素存取無序

       3.沒有索引

       4.不能存儲重複元素

HashSet:底層數據結構是哈希表,線程是不同步的無序,高效;

HashSet集合保證元素唯一性:通過元素的hashCode方法,和equals方法完成的。

當元素的hashCode值相同時,才繼續判斷元素的equals是否爲true。

如果爲true,那麼視爲相同元素,不存。如果爲false,那麼存儲。

如果hashCode值不同,那麼不判斷equals,從而提高對象比較的速度。

 

LinkedHashSet集合的概述和特點

      1.LinkedHashSet集合是HashSet集合的子類

      2.LinkedHashSet集合不能存儲重複元素

      3.LinkedHashSet集合可以保證元素存取有序

 

TreeSet集合的特點

        1.元素有序。元素可以按照一定規則進行排序。具體要取決於構造方法

               TreeSet():根據元素的自然順序進行排序

               TreeSet(Comparator c):根據指定的比較器進行排序

        2.TreeSet集合沒有索引。只能通過迭代器、增強for循環進行遍歷

        3.TreeSet集合不能存儲重複元素

 

TreeSet:

用於對Set集合進行元素的指定順序排序,排序需要依據元素自身具備的比較性。

如果元素不具備比較性,在運行時會發生ClassCastException異常。

所以需要元素實現Comparable接口,強制讓元素具備比較性,複寫compareTo方法

依據compareTo方法的返回值,確定元素在TreeSet數據結構中的位置。

TreeSet方法保證元素唯一性的方式:就是參考比較方法的結果是否爲0,如果return 0,視爲兩個對象重複,不存。

 

注意:在進行比較時,如果判斷元素不唯一,比如,同姓名,同年齡,才視爲同一個人。

在判斷時,需要分主要條件和次要條件,當主要條件相同時,再判斷次要條件,按照次要條件排序。

 

TreeSet集合排序有兩種方式,Comparable和Comparator區別:

1:讓元素自身具備比較性,需要元素對象實現Comparable接口,覆蓋compareTo方法。

2:讓集合自身具備比較性,需要定義一個實現了Comparator接口的比較器,並覆蓋compare方法,並將該類對象作爲實際參數傳遞給TreeSet集合的構造函數。

第二種方式較爲靈活。

Map集合

Map集合的特點

  1. Map是雙列數據存儲的集合
  2. map<k,v>  鍵值對存儲,成對的存儲
  3. map中的鍵是唯一的,不可重複的

Map中的主要方法

put<k,v>  添加

remove()   刪除

get(Object key)   獲取對應鍵的值

isEmpty()  判斷集合是否爲空

size()返回集合的大小

containsKey​(Object key)  是否包含key鍵

containsValue​(Object value)  是否包含value值

 

2種Map集合的遍歷

使用增強for循環

Map<k,v> s =new HashMap<>();

Set<String > s1=s.keySet();  獲取集合S中的鍵

for(String st :s1){//對集合s1進行遍歷,獲取集合M中的所有鍵

   s.get(s1);//獲取對應的鍵所對應的值

sout();

}

使用Map中自帶的遍歷

for (Map.Entry<String,Student>  m11:m.entrySet()
     ) {
    String key = m11.getKey();
    Student value = m11.getValue();
    System.out.println("學號"+key+"姓名"+value.getName()+"年齡"+value.getAge());

}

 

Collections  工具類(只適應於list集合)

3種方法

Collections.sort(list);    排序

Collections.resverse(list);  反轉

Collections.shuffle(list);    打亂

 

集合的使用技巧

看到Array就是數組結構,有角標,查詢速度很快。

看到link就是鏈表結構:增刪速度快,而且有特有方法。addFirst; addLast; removeFirst(); removeLast(); getFirst();getLast();

看到hash就是哈希表,就要想要哈希值,就要想到唯一性,就要想到存入到該結構的中的元素必須覆蓋hashCode,equals方法。

看到tree就是二叉樹,就要想到排序,就想要用到比較。

比較的兩種方式:

一個是Comparable:覆蓋compareTo方法;

一個是Comparator:覆蓋compare方法。

LinkedHashSet,LinkedHashMap:這兩個集合可以保證哈希表有存入順序和取出順序一致,保證哈希表有序。

 

集合什麼時候用?

當存儲的是一個元素時,就用Collection。當存儲對象之間存在着映射關係時,就使用Map集合。

保證唯一,就用Set。不保證唯一,就用List。

 

 

 

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