日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

JDK源码解析之Java.util.Collections

發(fā)布時(shí)間:2025/3/8 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK源码解析之Java.util.Collections 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java.util.Collections 是一個(gè)包裝類。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類不能實(shí)例化,就像一個(gè)工具類,服務(wù)于Java的Collection框架。

一、源碼解析

1、不可實(shí)例化

private Collections() {}

Collections是util包中一個(gè)不可實(shí)例化的類。

2、優(yōu)化參數(shù)

private static final int BINARYSEARCH_THRESHOLD = 5000;private static final int REVERSE_THRESHOLD = 18;private static final int SHUFFLE_THRESHOLD = 5;private static final int FILL_THRESHOLD = 25;private static final int ROTATE_THRESHOLD = 100;private static final int COPY_THRESHOLD = 10;private static final int REPLACEALL_THRESHOLD = 11;private static final int INDEXOFSUBLIST_THRESHOLD = 35;

Collecions定義的這些變量叫做優(yōu)化參數(shù)(Tuning Parameter),其作用在于優(yōu)化類中方法的性能(permformance)。

3、排序函數(shù)sort()

3.1、根據(jù)元素的自然順序?qū)χ付斜戆瓷蜻M(jìn)行排序
@SuppressWarnings("unchecked")public static <T extends Comparable<? super T>> void sort(List<T> list) {list.sort(null);}

參數(shù):要排序的列表。

3.2、根據(jù)指定比較器產(chǎn)生的順序?qū)χ付斜磉M(jìn)行排序。此列表內(nèi)的所有元素都必須可使用指定比較器相互比較。
@SuppressWarnings({"unchecked", "rawtypes"})public static <T> void sort(List<T> list, Comparator<? super T> c) {list.sort(c);}

參數(shù):list-要排序的列表;c-確定列表順序的比較器。

3.3、關(guān)于list.sort方法
List.sort是JDK在1.8增加的方法
@SuppressWarnings({"unchecked", "rawtypes"})default void sort(Comparator<? super E> c) {Object[] a = this.toArray();Arrays.sort(a, (Comparator) c);ListIterator<E> i = this.listIterator();for (Object e : a) {i.next();i.set((E) e);}}

首先,傳入一個(gè)比較器作為參數(shù),然后就是將list轉(zhuǎn)換成一個(gè)數(shù)組,再對(duì)這個(gè)數(shù)組進(jìn)行排序,排序完之后,再利用iterator重新改變list。

4、二分查找方法binarySearch()

Collection中binarySearch及其相關(guān)的方法有很多,這里只選兩個(gè)有代表性的

4.1、使用二分搜索法搜索指定列表,以獲得指定對(duì)象,在進(jìn)行此方法調(diào)用前比較要將列表元素按照升序排序,否則結(jié)果不確定,此方法會(huì)執(zhí)行O(n)次鏈接遍歷和O(log n)次元素比較。
public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) {if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)return Collections.indexedBinarySearch(list, key);elsereturn Collections.iteratorBinarySearch(list, key);}

參數(shù): list-要搜索的鏈表,key-要搜索的鍵。

4.2、根據(jù)指定的比較器對(duì)列表進(jìn)行升序排序。
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) {if (c==null)return binarySearch((List<? extends Comparable<? super T>>) list, key);if (list instanceof RandomAccess || list.size()<BINARYSEARCH_THRESHOLD)return Collections.indexedBinarySearch(list, key, c);elsereturn Collections.iteratorBinarySearch(list, key, c);}

參數(shù):list-要搜索的列表,key-要搜索的鍵,c-排序列表的比較器。

5、反轉(zhuǎn)方法reverse()

轉(zhuǎn)指定列表中元素的順序,此方法以線性時(shí)間運(yùn)行。

@SuppressWarnings({"rawtypes", "unchecked"}) public static void reverse(List<?> list) {int size = list.size();if (size < REVERSE_THRESHOLD || list instanceof RandomAccess) {for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)swap(list, i, j);} else {// instead of using a raw type here, it's possible to capture// the wildcard but it will require a call to a supplementary// private methodListIterator fwd = list.listIterator();ListIterator rev = list.listIterator(size);for (int i=0, mid=list.size()>>1; i<mid; i++) {Object tmp = fwd.next();fwd.set(rev.previous());rev.set(tmp);}} }

? 參數(shù):list-元素要被反轉(zhuǎn)的列表

6、改組方法shuffle()

6.1、用默認(rèn)隨機(jī)源對(duì)指定列表進(jìn)行置換,所有置換發(fā)生的可能性都是大致相等的
public static void shuffle(List<?> list) {Random rnd = r;if (rnd == null)r = rnd = new Random(); // harmless race.shuffle(list, rnd);}

參數(shù):list-要改組的列表

6.2、用指定的隨機(jī)源對(duì)指定列表進(jìn)行置換
@SuppressWarnings({"rawtypes", "unchecked"}) public static void shuffle(List<?> list, Random rnd) {int size = list.size();if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {for (int i=size; i>1; i--)swap(list, i-1, rnd.nextInt(i));} else {Object[] arr = list.toArray();// Shuffle arrayfor (int i=size; i>1; i--)swap(arr, i-1, rnd.nextInt(i));// Dump array back into list// instead of using a raw type here, it's possible to capture// the wildcard but it will require a call to a supplementary// private methodListIterator it = list.listIterator();for (int i=0; i<arr.length; i++) {it.next();it.set(arr[i]);}} }

參數(shù):list-要改組的列表,rnd-用來(lái)改組列表的隨機(jī)源。

7、其他主要方法

7.1、交換方法swap()
  • ? 函數(shù)定義:public static void swap(List<?> list,int i,int j)
  • ? 在指定列表的指定位置處交換元素。
  • ? 參數(shù):list-進(jìn)行元素交換的列表,i-要交換的一個(gè)元素的索引,j-要交換的另一個(gè)元素的索引。
7.2、替換方法fill()
  • ? 函數(shù)定義:public static void fill(List<? super T> list,T obj)
  • ? 使用指定元素替換指定列表中的所有元素,線性時(shí)間運(yùn)行。
  • ? 參數(shù):list-使用指定元素填充的列表,obj-用來(lái)填充指定列表的元素。
7.3、復(fù)制方法copy()
  • ? 函數(shù)定義:public static void copy(List<? super T> dest,List<? extends T> src)
  • ? 將所有元素從一個(gè)列表復(fù)制到另一個(gè)列表。執(zhí)行此操作后,目標(biāo)列表中每個(gè)已復(fù)制元素的索引將等同于源列表中該元素的索引,目標(biāo)列表的長(zhǎng)度至少必須等于源列表。
  • ? 參數(shù):dest-目標(biāo)列表,src-源列表。
7.4、最小值法min()
  • ? 函數(shù)定義:public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

  • ? 根據(jù)元素的自然順序返回給定Collection的最小元素,Collection中的所有元素必須實(shí)現(xiàn)Comparable接口,此外,collection中的所有元素都必須是可相互比較的。

  • ? 參數(shù):coll-將確定其最小元素的collection。

  • ? 函數(shù)定義:public static T min(Collection<? extends T> coll,Comparator<? super T> comp)

  • ? 根據(jù)指定比較器產(chǎn)生的順序,返回給定collection的最小元素。

  • ? 參數(shù):coll-將確定其最小元素的collection,comp-用來(lái)確定最小元素的比較器。

7.5、最大值方法max()
  • ? 函數(shù)定義:public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
  • ? 根據(jù)元素的自然順序,返回給定collection的最大元素。
  • ? 參數(shù):coll-將確定其最大元素的collection。
  • ? 函數(shù)定義:public static T max(Collection<?extends T> coll,Comparator<? super T> comp)
  • ? 根據(jù)指定比較器產(chǎn)生的順序,返回給定collection的最大元素。
  • ? 參數(shù):coll-將確定其最大元素的collection,comp-用來(lái)確定最大元素的比較器
7.6、輪換方法rotate()
  • ? 函數(shù)定義:public static void rotate(List<?> list,int distance)
  • ? 根據(jù)指定的距離輪轉(zhuǎn)指定列表中的元素。
  • ? 參數(shù):list-要輪換的列表,distance-列表輪換的距離,可以使0、負(fù)數(shù)或者大于list.size()的數(shù)。
7.7、替換所有函數(shù)replaceAll()
  • ? 函數(shù)定義:public static boolean replaceAll(List list,T oldVal,T newVal)
  • ? 使用另一個(gè)值替換列表總出現(xiàn)的所有的某一指定值。
  • ? 參數(shù):list-在其中進(jìn)行替換的列表;oldVal-將被替換的原值;newVal-替換oldVald的新值。

二、Collection和Collections區(qū)別

1.Collection:

Collection是集合類的上層接口。本身是一個(gè)Interface,里面包含了一些集合的基本操作。

Collection接口是Set接口和List接口的父接口

2.Collections

Collections是一個(gè)集合框架的幫助類,里面包含一些對(duì)集合的排序,搜索以及序列化的操作。

Collections是一個(gè)類,

Collections 是一個(gè)包裝類,Collection 表示一組對(duì)象,這些對(duì)象也稱為 collection 的元素。一些 collection 允許有重復(fù)的元素, 而另一些則不允許,一些 collection 是有序的,而另一些則是無(wú)序的。

總結(jié)

以上是生活随笔為你收集整理的JDK源码解析之Java.util.Collections的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产青青视频 | 亚洲自拍偷拍一区二区 | 美女自拍视频 | 亚洲 激情| 中文字幕第一区 | 亚州福利 | 艳妇臀荡乳欲伦交换h漫 | 男人的天堂你懂的 | 黄色欧美大片 | 色欲av伊人久久大香线蕉影院 | 国产一二区在线 | 久久一区二区三区视频 | 污视频在线 | 免费看黄在线看 | 中国av一区二区 | 色综合图片区 | 动漫av在线 | 欧美顶级毛片在线播放 | 91精品久久久久久久久 | 久久网站视频 | 国产午夜精品视频 | 韩日在线| 久久电影一区二区 | 国产一区二区小说 | 九九在线观看高清免费 | 欧美女同在线 | 做爰无遮挡三级 | 少妇人妻一区二区 | 亚州av在线 | 亚洲美免无码中文字幕在线 | 亚洲精品一区二区三区四区五区 | 国产精品美女久久久久av超清 | 毛片美女 | 亚洲性图第一页 | 美女屁股网站 | 蜜桃久久精品 | 亚洲情侣在线 | www.日韩在线观看 | 日本人与黑人做爰视频 | 东京热毛片 | 成人91看片 | 天堂av免费在线 | 不卡av在线 | 波多野结衣电车痴汉 | 欧美另类极品videosbest使用方法 | 国内精品少妇 | 91麻豆精品国产91久久久久久 | 韩国特级毛片 | 一区二区av电影 | 久久久久国产精品无码免费看 | 免费一级欧美片在线播放 | 激情网站视频 | www.777奇米 | 欧美熟妇久久久久 | 中文字幕在线视频免费观看 | 亚洲国产毛片 | 欧美亚洲高清 | 91在线公开视频 | 四虎成人精品永久免费av九九 | 国产777| 高h校园不许穿内裤h调教 | 国产精品成人免费一区二区视频 | 国偷自产av一区二区三区麻豆 | 亚洲无吗一区二区三区 | 国产嫩草在线观看 | 在线看你懂| 99精品一区 | 色乱码一区二区三在线看 | 神马影院午夜伦理 | 成人区人妻精品一区二区网站 | 欧美午夜精品一区二区 | 香蕉视频网站在线 | 日本黄色小视频 | 国产成人精品久久久 | 中文字幕日韩一区二区三区不卡 | 久久发布国产伦子伦精品 | 夜夜伊人| 久久亚洲AV无码精品 | 自拍1页 | 国产精品99| 欧美一区二区三区观看 | 蜜美杏av | 亚洲每日更新 | 国产原创视频在线观看 | 一道本久久 | 在线资源站 | 伊人福利视频 | 日本a级片网站 | 国产一区二区三区视频播放 | 在线免费一级片 | 中文字幕成人av | 91叼嘿视频| 人妻无码久久一区二区三区免费 | 成人在线小视频 | 国产夫妻在线观看 | 校园sm主奴调教1v1罚视频 | 国产高清在线免费观看 | 黄色av网站在线播放 | 欧美成人h版 |