Java集合概述

概覽

  Java集合也叫容器,能夠容納其它的Java對象,始於JDK1.2.優勢是:java

  1.下降編程難度編程

  2.提升程序性能jvm

  3.提升API間的互操做性性能

  4.下降學習難度學習

  5.下降設計和實現相關API的難度spa

  6.增長程序的重用性設計

  Java容器裏只能放對象,對於基本類型(int, long, float, double等),須要將其包裝成對象類型後(Integer, Long, Float, Double等)才能放到容器裏。不少時候拆包裝和解包裝可以自動完成。這雖然會致使額外的性能和空間開銷,但簡化了設計和編程。3d

 

泛型

  java容器可以容納任何類型的對象,這一點是經過Java的泛型機制完成的。Java泛型是是編譯器爲咱們提供的一個語法糖,在編譯的時候對相應的字符串替換,自己不須要jvm虛擬機的支持。實質上Java的單繼承機制纔是保證這一特性的根本,由於全部的對象都是Object的子類,容器裏只要可以存放Object對象就好了。 事實上,全部容器的內部存放的都是Object對象,泛型機制只是簡化了編程,由編譯器自動幫咱們完成了強制類型轉換而已。code

  

//JDK 1.4 or before
ArrayList list = new ArrayList(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(int i = 0; i < list.size(); i++){ String weekday = (String)list.get(i);//顯式類型轉換
    System.out.println(weekday.toUpperCase()); }
//JDK 1.5 or latter
ArrayList<String> list = new ArrayList<String>();//參數化類型
list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(int i = 0; i < list.size(); i++){ String weekday = list.get(i);//隱式類型轉換,編譯器自動完成
    System.out.println(weekday.toUpperCase()); }

 

接口和實現類

  接口:

      java集合統一設計,定義了14個接口。關係如圖:對象

    

 

     Map接口沒有繼承自Collection接口,由於Map表示的是關聯式容器而不是集合。但Java爲咱們提供了從Map轉換到Collection的方法,能夠方便的將Map切換到集合視圖。 上圖中提供了Queue接口,卻沒有Stack,這是由於Stack的功能已被JDK 1.6引入的Deque取代。

    

  實現:

    一些常見類的實現如圖:

    

 

 迭代器:

    java集合的迭代器,爲咱們提供了遍歷容器中元素的方法。只有容器自己清楚容器裏元素的組織方式,所以迭代器只能經過容器自己獲得。每一個容器都會經過內部類的形式實現本身的迭代器。

    

//visit a list with iterator
ArrayList<String> list = new ArrayList<String>(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); Iterator<String> it = list.iterator();//獲得迭代器
while(it.hasNext()){ String weekday = it.next();//訪問元素
    System.out.println(weekday.toUpperCase()); }
//使用加強for迭代
ArrayList<String> list = new ArrayList<String>(); list.add(new String("Monday")); list.add(new String("Tuesday")); list.add(new String("Wensday")); for(String weekday : list){//enhanced for statement
    System.out.println(weekday.toUpperCase()); }
相關文章
相關標籤/搜索