Java核心API之集合

1.集合的概念:

Java集合類存放於 java.util 包中,是一個用來存放對象的容器。集合的長度不定,數組在定義的時候長度便已經固定。

注意:①、集合只能存放對象。比如你存一個 int 型數據 1放入集合中,其實它是自動轉換成 Integer 類後存入的,Java中每一種基本類型都有對應的引用類型。

   ②、集合存放的是多個對象的引用,對象本身還是放在堆內存中。

   ③、集合可以存放不同類型,不限數量的數據類型。

Java 集合框架主要包括兩種類型的容器,一種是集合(Collection),存儲一個元素集合,另一種是圖(Map),存儲鍵/值對映射。Collection 接口又有 3 種子類型,List、Set 和 Queue,再下面是一些抽象類,最後是具體實現類,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

Collection:

list:有序可重複,包括 Arraylist、Linkedlist、Vector、Stack,有公用的方法包括add、remove、size、 contains

Set:無序不可重複,包括 Hashset、Treeset

Map<K,V>  :

Map 存儲一組鍵值對象,提供key(鍵)到value(值)的映射,包括 Hashmap、Hashtable

Collections:

collections是java提供的一個集合工具類,提供排序、遍歷等方法

 

2.arraylist的使用

arraylist有序可重複,可包含多個null元素,默認容量爲10,可自動擴容縮容,每次默認自增50%。arraylist遍歷和隨機訪問方便,具有3個構造方法,分別是1.默認構造方法  2.參數爲集合的構造方法  3.指定長度的構造方法。

arraylist常用方法:

  • add(index,object)在指定位置放入元素
  • get(index)根據下標獲取元素
  • clear()清空集合、
  • add(list)將集合放入集合是集合的拷貝而不是放引用
  • remove之後立即縮容  容易出現數組下標越界

注意:遍歷過程中不允許刪除元素除非使用迭代器

 

3.linkedlist的使用

linklist是鏈表式存儲,無序不重複,插入、刪除時效率較高,主要方法包括Addfirst 、addlast、getfirst、getlast,上轉型之後只能調用轉型後對象的方法

 

4. Vector的使用

vector有索引,能夠自動擴容縮容,擴容默認增長一倍,

與arraylist的區別

實現原理相同,都是基於動態數組,很多情況下可互用

Arraylist:線程非安全的,重速度輕安全

Vector:線程安全

 

5.集合的遍歷方式和泛型的使用

       泛型:指定該集合只能存放某種類型的元素

       list的遍歷通過迭代器實現,通過list.Iterator()得到迭代器對象

       Iterator  it  =  list.Iterator();

       While(it.hasnext){

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

}

      

注意:

  • 在迭代的過程當中,索引會被自動維護,即如果當前對象被刪除則迭代器後退
  • 不能在next()之前iterator.Remove()
  • 不能在迭代器遍歷過程中調用集合的remove()

 

 

6.迭代器模式:

  • 迭代器模式提供一種方法順序訪問一個聚合對象的各個元素而又不暴露該對象的內部結構。
  • 通過Collection接口的iterator()方法 返回一個迭代器
  • 實現了collection接口的所有集合都可以有一個指向自己的迭代器
  • 所有實現了collection的集合都可以使用迭代器進行遍歷
  • 不同集合有不同iterator實現類

 

 

7.stack的使用

規則:先進後出  後進先出

Push壓入  pop出  peek得到棧頂對象但不移除它

 

8.Hashset的使用 

hashset是collection接口的完全實現,hashset無序不重複。

關於如何定義元素是否重複:

  • 基本類型數據:值相同
  • 引用類型數據:比較堆地址
  • Hashcode  equals tostring重寫

Hashset在比較對象時會使用hashcode和equels方法

先比較hashcode再equels

  • equels相等時,hashcode一定相等
  • equels不等時,hashcode可能相等
  • hashcode不等,equels一定不等
  • hashcode相等,equels可能不等

重寫equels時一定要重寫hashcode  否則會違背上面4大原則

 

9.treeset的使用

有序不重複 ,使用元素的自然順序 ,結構是基於紅黑樹

 

10.元素的比較 

元素的比較通過實現comparable接口並重寫compareTo方法來實現 即 implement comparable<Emp>

Treeset在做add存放元素時就要開始比較了

comparable<Emp>表示只能比較Emp類型的對象

實現comparator接口  重寫compare方法

Set<Emp> set = new TreeSet<Emp>(new MyCpmpare)//將一把稱交給集合

Comparable接口:元素自身具備比較的特性

Comparator接口:集合自身具備比較的特性

 

11.Hashmap的使用

常用方法:

放put  鍵不允許重複,如果重複,後面的會把前面的覆蓋

得到get(key) 

得到長度size() 

得到鍵的集合map.keySet()  得到值的集合collection<> c = map.values()

entrySet()返回一個set集合  裏面放entry對象   相當於將key和value放到一個對象裏面

entry代表map中的映射關係  entry提供getKey和getValue方法

hashmap、treemap、hashtable的比較:

hashmap  哈希表  非線程安全  key允許null

treemap   紅黑樹  線程安全

hashtable  哈希表  非線程安全  key不允許null

 

12.集合的比較

數據結構

Arraylist   動態數組(遍歷)

Linklist     鏈表(增、刪)

Vector      動態數組   同步的  線程安全

Collections.binarySearch(要查找的集合,要查找的元素)

Arrays.asList(數組);將數組轉換爲一個List集合

System.currentTimeMillis得到系統時間

Arraylist:新容量=(舊容量*3)/2+1

Vector  翻倍增長

 

Hashmap  不同步,線程不安全

Hashtable  同步,線程安全,繼承於dictionary

 

Hashmap 

Hashset    基於hashmap實現  基於hashmap的鍵

 

13.集合工具類

Collections常用方法:

binarysearch二分查找默認 調用之前必須進行升序排序

Sort排序

Min/max

Reverse反轉

Replaceall替換    Copy

aslist 將數組轉換爲列表

    對於基本數據類型數組,整個數組轉換成一個元素

    對象數組中的元素轉換成集合中的元素

 

14.泛型類

可以代表多種類型  泛型的本質是參數化類型

Class 類名<T>  T在類中可以使用作爲類型來用

真正使用類的對象的時候,可以給T賦值

類中T所出現的地方都變成了賦值的類型

 

15.泛型方法

使用了泛型的方法:在泛型類中的方法

Public   <T>  T  test(T t){return t }  使用時值和類型一併賦值

 

16.泛型接口 

接口繼承多參數泛型

1.默認objec

2.實現接口時就確定類型是什麼

3.使用時才確定 class 類名 <T> implements inter<T>{  }

多參數泛型類

例如:class Myclass<T,K>{   }

 

17.泛型限定

       T type,  K key,  V value,  E element,  ?  不確定的Java類型

       限定:泛型能夠代表的類型被限定

       默認可以接受泛型類型的子類

       現在泛型的上限是fruit,所以現在泛型所等代表的只能是fruit類及其子類

       集合中泛型限定的使用   集合中不能使用泛型上限

       集合中泛型下限的使用

?extends T:上限:類型是T及其子類

?super T:下限:類型是T及其父類

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