Java 集合系列之一:JCF集合框架概述

容器,就是能夠容納其餘Java對象的對象。Java Collections Framework(JCF)爲Java開發者提供了通用的容器html

java集合主要劃分爲四個部分:java

  Collection(List列表、Set集合)、Map映射、迭代器(Iterator、Enumeration)、工具類(Arrays、Collections)程序員

背景

數組的優點:是一種簡單的線性序列,能夠快速地訪問數組元素,效率高。若是從效率和類型檢查的角度講,數組是最好的
數組的劣勢:不靈活。容量須要事先定義好,不能隨着需求的變化而擴容。
因爲數組的這些劣勢,咱們須要一種更強大、更靈活、容量隨時可擴大的集合(Collection)來存儲對象。(擴容)面試

基本類型

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

泛型

全部容器的內部存放的都是Object對象,泛型機制(語法糖,編譯器)只是簡化了編程,由編譯器自動幫咱們完成了強制類型轉換而已。JDK 1.4以及以前版本不支持泛型,類型轉換須要程序員顯式完成。編程

ArrayList<String> list = new ArrayList<String>();//泛型,參數化類型數組

泛型的通配符(?):安全

上限限定:public void getFunc(List<? extends Animal> an),那麼表示這裏的參數能夠傳入Animal,或者 Animal的子類框架

下限限定: public void getFunc(Set<? super Animal> an ),那麼表示這裏的參數能夠傳入Animal,或者Animal的父類工具

使用泛型的注意點:

一、泛型不支持基本數據類型

二、泛型不支持繼承,必須保持先後一致(好比這樣是錯誤的:List<Object> list = new ArrayList<String>();

內存

因爲Java裏對象都在堆上,且對象只能經過引用訪問,容器裏放的實際上是對象的引用而不是對象自己

Java集合框架圖

 

List鏈表

是Collection的子接口,裏面的內容容許重複。

List的特色:線性。即:有序。元素放入的順序和元素的存儲順序保持一致。

表象上:List最大的特色就是有下標。

ArrayList: 就是做爲一個數組的封裝出現的,底層就是數組。

LinkedList:底層封裝的是一個雙向鏈表。

一、查找、修改用的多的時候用ArrayList。

二、增長、刪除用的多的時候(特別是往中間增長、刪除)用LinkedList。

三、線程安全,數據量大的時候考慮用vector。

泛型<>:用來控制集合只能操做某一種數據類型。

遍歷:一、普通for循環遍歷。

     二、使用迭代器Iterator完成遍歷。——沒有下標從頭至尾走一遍,不能操做數組。

     三、for-each循環語句,底層封裝的就是迭代器,語法簡單,還能夠操做數組。推薦使用。

 

Set集

是collection的子接口,裏面的內容不容許重複。

特色:不能放置重複元素,無序存放元素。

表象上:Set沒有下標。

HashSet判斷兩元素不重複:一、調用equals方法比較兩對象

                                         二、兩元素的hashcode值保持一致

只有這兩個條件同時知足,java才認爲是同一對象。

全部重寫了equals方法通常要重寫hashcode方法,讓equals返回true的時候,hashcode返回的值應該同樣。

hashSet只有增、刪、求長度和遍歷等操做。

遍歷:一、迭代器

         二、for-each

 

Map映射

是存放一對值的最大接口,全部的元素都以鍵和值的方式存儲。

特色:鍵值對——鍵要求惟一,值能夠重複

經常使用子類:HashMap、Properties(專用於操做屬性文件)

HashMap

經常使用操做:增、刪、改、查、容、遍歷

遍歷的時候:不能同時遍歷全部的鍵和值,只能單獨遍歷鍵與值。

鍵在遍歷的時候用Set類型來接。

值在遍歷的時候用Collection來接。

hashMap與hashTable比較:一、hashMap非線性安全,hashTable是線性安全的。

                                     二、hashMap容許null來作鍵/值,hashTable不容許。

Properties

經常使用操做:增、刪、查、改、容、存、取。

存的時候,調用的是.store方法存文件,

取的時候,調用.load方法取文件。

文件類型:.properties——固定格式的文本文件,將是工做中使用率第二的配置文件。

 

Map.Entry

Map.Entry的內部接口,每一個

Map.Entry對象都保存着一對key——value的內容,每一個map接口中都保存有多個Map.Entry接口實例。

 

 

Iterator

集合的輸出接口,從前到後輸出指定集合中的內容。不能遍歷Map,只用來遍歷Collection。 

ListIterator

是Iterator的子接口,能夠進行雙向輸出。專門用來便利List.

Enumeration

是最先的輸出接口,用於輸出指定集合中的內容。

 

collections

集合操做的算法類

包括排序、求最大、最小、反轉、隨機混排等操做

排序的時候,由於是對對象排序,因此應按必定的業務邏輯的天然順序排序。

 

比較器

comparable接口:內部比較器

可對任意數組排序,java泛型技術,二叉樹排序原理

一、類實現comparable接口

二、重寫compareTo方法

compareTo方法返回的是int類型數據:1表示大於,-1表示小於,0表示相等。

comparator接口:外部比較器

補救的作法

此接口同樣須要重寫方法,但方法接收兩個對象,返回值依然是一、-一、0;

 

SortedSet

單值的排序接口,實現此接口的集合類,裏面的內容可使用比較器排序。

SortedMap

存放一對值的排序接口,裏面內容按照key排序,使用比較器排序。

 

Queue

隊列接口,此接口的子類能夠實現隊列操做。

 

 

抄錄網址

  1. day18 集合框架(JCF)
  2. Java集合框架(JCF)概括總結
  3. Java Collection集合面試題(精選)
  4. java集合框架綜述
  5. java集合系列——java集合概述(一)
相關文章
相關標籤/搜索