最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于java集合中的一些易混淆的知識點(詳解)

 更新時間:2016年09月07日 11:11:48   投稿:jingxian  
下面小編就為大家?guī)硪黄趈ava集合中的一些易混淆的知識點(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

(一) collection和collections

這兩者均位于java.util包下,不同的是:

collection是一個集合接口,有ListSet等常見的子接口,是集合框架圖的第一個節(jié)點,,提供了對集合對象進行基本操作的一系列方法。

常見的方法有:

boolean add(E e) 往容器中添加元素;int size() 返回collection的元素數(shù);boolean isEmpty() 判斷此容器是否為空; boolean contains(Object o) 如果此collection包含指定的元素,則返回true,,這里會用到equals()方法;boolean remove(Object o) 移除指定元素的實例;等。

而collections是一個包裝類,它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法,它包含在 collection 上操作的多態(tài)算法,即“包裝器”,包裝器返回由指定 collection 支持的新 collection,以及少數(shù)其他內(nèi)容。

常見的方法有:

void sort(List) 對List的內(nèi)容進行排序。

這里要注意的是,(ps:以下有關(guān)sort()的說明摘自淺談對象數(shù)組或list排序及Collections排序原理,對List及Collection排序追本溯源,寫得很清晰)

這個sort()函數(shù)中的排序主體是Arrays.sort(),

@SuppressWarnings("unchecked") 
public static <T extends Comparable<? super T>> void sort(List<T> list) { 
 Object[] array = list.toArray(); 
 Arrays.sort(array); 
 int i = 0; 
 ListIterator<T> it = list.listIterator(); 
 while (it.hasNext()) { 
  it.next(); 
  it.set((T) array[i++]); 
 } 
} 
而Arrays.sort()中,可以看出是通過ComparableTimSort.sort(Object[] a)實現(xiàn)的:
public static void sort(Object[] array) { 
 // BEGIN android-changed 
 ComparableTimSort.sort(array); 
 // END android-changed 
} 
static void sort(Object[] a)到static void sort(Object[] a, int lo, int hi)到private static void binarySort(Object[] a, int lo, int hi, int start)。在binarySort中用于大小比較部分為:
Comparable<Object> pivot = (Comparable) a[start]; 
int left = lo; 
int right = start; 
assert left <= right; 
 
while (left < right) { 
 int mid = (left + right) >>> 1; 
 if (pivot.compareTo(a[mid]) < 0) 
  right = mid; 
 else 
  left = mid + 1; 
} 

二分查找中比較大小部分使用了Comparable接口的唯一一個方法:compareTo(),所有如果自定義的類裝載到容器中需要進行比較的時候,要實現(xiàn)Comparable接口或繼承Comparator類,并重寫compareTo()方法。

int binarySearch(List object) 對于順序的List容器,采用折半查找法查找指定對象;void reverse(List) 對List的容器內(nèi)的對象進行逆序排列;等。

(二)Iterator和Iterable

首先,Iterable位于java.lang包下,Iterator位于java.util包下。在集合框架中,Iterator接口中定義了一下三個方法:boolean hasNext();E next();void remove()。而Iterable中只定義了一個方法:iterator(),返回值為實現(xiàn)了Iterator接口的的一個對象。Collection繼承了Iterable這個超級接口,故所有的集合框架中的實現(xiàn)類都具有iterator()這個方法,而多態(tài)讓Iterator的引用可以訪問到當前集合中實現(xiàn)了Iterator的那部分(即那三個方法)。此時如果需要刪除元素,由于Iterator對這個集合操作時完成了鎖定,在用Iterator循環(huán)遍歷的過程中只能使用Iterator的remove()方法,而不能使用Collection自己的remove(Object)方法。

那么為什么一定要實現(xiàn)Iterable接口,為什么不直接實現(xiàn)Iterator接口呢,這樣就可以讓集合類直接繼承這三個方法?

看一下JDK中的集合類,比如List一族或者Set一族,都是實現(xiàn)了Iterable接口,但并不直接實現(xiàn)Iterator接口。

仔細想一下這么做是有道理的。 

因為Iterator接口的核心方法next()或者hasNext() 是依賴于迭代器的當前迭代位置的。

如果Collection直接實現(xiàn)Iterator接口,勢必導(dǎo)致集合對象中包含當前迭代位置的數(shù)據(jù)(指針)。

當集合在不同方法間被傳遞時,由于當前迭代位置不可預(yù)置,那么next()方法的結(jié)果會變成不可預(yù)知。

除非再為Iterator接口添加一個reset()方法,用來重置當前迭代位置。

但即時這樣,Collection也只能同時存在一個當前迭代位置。

而Iterable則不然,每次調(diào)用都會返回一個從頭開始計數(shù)的迭代器。

多個迭代器是互不干擾的。

以上這篇基于java集合中的一些易混淆的知識點(詳解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java面向?qū)ο笾械睦^承

    詳解Java面向?qū)ο笾械睦^承

    這篇文章主要介紹了詳解Java面向?qū)ο笾械睦^承,繼承提高代碼的復(fù)用性:通過繼承,子類可以直接使用父類的屬性和方法,不需要重復(fù)定義,需要的朋友可以參考下
    2023-05-05
  • Java 動態(tài)加載jar和class文件實例解析

    Java 動態(tài)加載jar和class文件實例解析

    這篇文章主要介紹了Java 動態(tài)加載jar和class文件實例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Hadoop使用hdfs指令查看hdfs目錄的根目錄顯示被拒的原因及解決方案

    Hadoop使用hdfs指令查看hdfs目錄的根目錄顯示被拒的原因及解決方案

    這篇文章主要介紹了Hadoop使用hdfs指令查看hdfs目錄的根目錄顯示被拒的原因及解決方案,分布式部署hadoop,服務(wù)機只有namenode節(jié)點,主機包含其他所有節(jié)點,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-10-10
  • 在Mybatis使用Integer與''進行比較的坑及解決

    在Mybatis使用Integer與''進行比較的坑及解決

    這篇文章主要介紹了在Mybatis使用Integer與''進行比較的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 使用Netty快速實現(xiàn)一個群聊功能的示例詳解

    使用Netty快速實現(xiàn)一個群聊功能的示例詳解

    這篇文章主要為大家詳細介紹了如何利用?Netty?框架開發(fā)一個?WebSocket?服務(wù)端,從而實現(xiàn)一個簡單的在線聊天功能,感興趣的小伙伴可以了解下
    2023-11-11
  • JAVA多線程編程實例詳解

    JAVA多線程編程實例詳解

    這篇文章主要介紹了JAVA多線程編程,結(jié)合實例形式總結(jié)分析了多線程、鎖、線程池等相關(guān)原理及使用技巧,需要的朋友可以參考下
    2019-09-09
  • Spring Boot配置AOP打印日志的全過程

    Spring Boot配置AOP打印日志的全過程

    這篇文章主要給大家介紹了關(guān)于Spring Boot配置AOP打印日志的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • SpringBoot處理全局統(tǒng)一異常的實現(xiàn)

    SpringBoot處理全局統(tǒng)一異常的實現(xiàn)

    這篇文章主要介紹了SpringBoot處理全局統(tǒng)一異常的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java  中MyBatis注解映射的實例詳解

    java 中MyBatis注解映射的實例詳解

    這篇文章主要介紹了java 中MyBatis注解映射的實例詳解的相關(guān)資料,這里提供實例幫助大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • java實現(xiàn)線程阻塞式方法

    java實現(xiàn)線程阻塞式方法

    Java阻塞式方法會使線程暫停執(zhí)行,不占用CPU資源直至條件滿足,常見阻塞方法如Thread.sleep()、Object.wait()和I/O操作,具有一定的參考價值,感興趣的可以了解一下
    2024-10-10

最新評論

汉阴县| 射阳县| 清流县| 广河县| 麻城市| 香河县| 桐乡市| 武夷山市| 日照市| 兴文县| 富宁县| 米脂县| 怀仁县| 红原县| 江川县| 东丽区| 南投市| 余干县| 吉木萨尔县| 抚顺县| 东乡族自治县| 开平市| 兴和县| 同仁县| 苗栗市| 乐平市| 舒城县| 清镇市| 普洱| 福建省| 丹巴县| 邻水| 临潭县| 大方县| 都匀市| 灵武市| 馆陶县| 扬州市| 富平县| 安龙县| 万年县|