集合架構詳解

來源:互聯網
上載者:User

集合架構是為表示和操作集合而規定的一種統一的標準的體繫結構。
一.集合架構概述:
    1、Java的集合架構提供了一套設計優良的介面和類,使程式員操作成批的資料或對象元素極為方便,極大的簡化了程式員編程時的負擔。
    2、Java的集合架構的核心介面為:Collection、Map、Iterator,這三個介面為以後要使用的最重點的介面。
    3、按具體集合類使用上的特性來分的話,主要有三類:List、Set和Map。List是有序的,但允許重複;Set是無序的,但不允許重複;Map表現的是索引值對的概念。


集合可以理解為包含一堆元素的對象。

二.集合與數組的區別:

1、數組是定長,即建立後固定不變(數組在執行個體化的時候是一定要指定長度的);集合不是定長,其長度可動態增長或減少。

2、數組是同構的,即數組中的元素是相同的類型;集合可以是異構的(容易造成安全隱患),當然也可以通過泛型建立型別安全的同構集合。

3、數組中可以存放基礎資料型別 (Elementary Data Type)或對象;集合只存放對象。

4、數組的讀取效率比集合更高,但集合能夠適用的環境比數組要寬廣的多。數組是直接按下標提取元素,提取元素是不需要經過運算的。而集合是通過方法再來轉化成內部的儲存結構,來讀取元素或者儲存元素,是要經過換算的,得到演算法的支援的。

三.Collection介面

1、Collection介面是在整合Java集合中List和Set的父介面,此介面定義如下:   

public interface Collection<E> extends Iterable<E>{}

此介面使用了泛型,在Java5之後為了使集合操作更加安全,引入了泛型。這裡簡單瞭解泛型知識:

public class GenericHolder<T> {//類型別參數化,具體使用時決定類的類型;多個參數之間用,隔開;private T content;public T getContent() {return content;}public void setContent(T content) {this.content = content;}public static void main(String[] args) {GenericHolder<String> sHolder = new GenericHolder<String>();//表明GenericHolder中存放的是String類型的contentsHolder.setContent("string");GenericHolder<Integer> iHolder = new GenericHolder<Integer>();//表明GenericHolder中存放的是Integer類型的contentiHolder.setContent(123);GenericHolder<Bus> bHolder = new GenericHolder<Bus>();//表明GenericHolder中存放的是Bus類類型的contentbHolder.setContent(new Bus());GenericHolder oHolder = new GenericHolder();//表明GenericHolder中存放的是Object類型的contentoHolder.setContent("object");}}class Bus {}

2、Collection介面中的常用方法

package com.microxt.fusion.web;import java.util.Arrays;import java.util.Collection;import java.util.Collections;import java.util.HashSet;import java.util.Iterator;public class GenericHolder {public static void main(String[] args) {Collection<String> c = new HashSet<String>();//String類型的集合HashSetSystem.out.println(c.add("one"));//添加元素成功,返回true,也就打出trueSystem.out.println(c.add("one"));//由於HashSet集合不允許添加重複元素,打出falsec.add("two");c.add("three");c.add("four");c.add("five");System.out.println(c);//列印出HashSet集合對象c中添加的元素System.out.println(c.remove("three"));//列印出true;System.out.println(c.remove("three"));//列印出false;System.out.println(c);Iterator<String> it = c.iterator();//Collection對象的iterator()方法返回一個Iteratorwhile (it.hasNext()) {//判斷是否有下一個元素String s = it.next();System.out.println(s);}System.out.println("-------------------------");System.out.println("one:" + c.contains("one"));//contains()用來檢查集合裡面有沒有指定元素存在;列印出true;System.out.println("three:" + c.contains("three"));//列印出false;System.out.println("-------------------------");Collection<String> c2 = new HashSet<String>();Collections.addAll(c2, "two", "five", "six");//加到集合c2中的元素是two、five、six,且後邊元素的個數是不限的,可變的;c.retainAll(c2);//c集合中只保留c2集合中指定的元素System.out.println(c);System.out.println("-------------------");String[] array = c.toArray(new String[5]);//將集合轉化成數組 ;長度為5的String類型的數組;System.out.println(Arrays.toString(array));}}

四.Set介面

1、Set介面是Collection的子介面,Set內的元素是唯一的;

2、Set介面並沒有對Collection介面進行擴充,但在具體方法的含義上進行了進一步約定;

3、Set不包含滿足e1.equals(e2)的元素對e1和e2,並且最多包含一個null元素;

4、那麼在此介面中有兩個常用的子類:HashSet、TreeSet;

HashSet

1、HashSet是Set介面最常用的一種實現,它不保障元素的迭代順序,並允許使用null元素;

2、HashSet根據雜湊碼來確定對象在容器中的儲存位置,因此要加入的元素要實現hashCode方法,同時它具有非常優秀的查詢效能;

3、在比較兩個元素是否相同時,HashSet會先比較雜湊值是否相同,再使用equals方法比較,如果兩者都相同,則視為相同的對象。

4、加入到HashSet中的元素類,最好總是重新定義equals和hashCode方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.