摘要:類比根據(jù)定制排序,返回最大元素,排序規(guī)則由類控制。返回指定支持的同步線程安全的。將返回的列表更改為寫入數(shù)組。字符串表示由數(shù)組元素的列表組成,括在方括號(hào)中。
1. Collections類的常見操作: 1.1. 排序操作:
集合類庫使用的是歸并排序比快速排序要慢一些,快速排序是通用排序算法的傳統(tǒng)選擇。但是,歸并排序有一個(gè)主要的優(yōu)點(diǎn)就是穩(wěn)定。
void reverse(List list)//反轉(zhuǎn)
void shuffle(List list)//隨機(jī)排序
void sort(List list)//按自然排序的升序排序
void sort(List list, Comparator c)//定制排序,由Comparator控制排序邏輯
void swap(List list, int i , int j)//交換兩個(gè)索引位置的元素
void rotate(List list, int distance)//旋轉(zhuǎn)。當(dāng)distance為正數(shù)時(shí),將list后distance個(gè)元素整體移到前面。當(dāng)distance為負(fù)數(shù)時(shí),將 list的前distance個(gè)元素整體移到后面。
示例代碼:
ArrayList1.2. 查找,替換操作:arrayList = new ArrayList (); arrayList.add(-1); arrayList.add(3); arrayList.add(3); arrayList.add(-5); arrayList.add(7); arrayList.add(4); arrayList.add(-9); arrayList.add(-7); System.out.println("原始數(shù)組:"); System.out.println(arrayList); // void reverse(List list):反轉(zhuǎn) Collections.reverse(arrayList); System.out.println("Collections.reverse(arrayList):"); System.out.println(arrayList); Collections.rotate(arrayList, 4); System.out.println("Collections.rotate(arrayList, 4):"); System.out.println(arrayList); // void sort(List list),按自然排序的升序排序 Collections.sort(arrayList); System.out.println("Collections.sort(arrayList):"); System.out.println(arrayList); // void shuffle(List list),隨機(jī)排序 Collections.shuffle(arrayList); System.out.println("Collections.shuffle(arrayList):"); System.out.println(arrayList); // 定制排序的用法 Collections.sort(arrayList, new Comparator () { @Override public int compare(Integer o1, Integer o2) { return o2.compareTo(o1); } }); System.out.println("定制排序后:"); System.out.println(arrayList);
int binarySearch(List list, Object key)//對(duì)List進(jìn)行二分查找,返回索引,注意List必須是有序的
int max(Collection coll)//根據(jù)元素的自然順序,返回最大的元素。 類比int min(Collection coll)
int max(Collection coll, Comparator c)//根據(jù)定制排序,返回最大元素,排序規(guī)則由Comparatator類控制。類比int min(Collection coll, Comparator c)
void fill(List list, Object obj)//用指定的元素代替指定list中的所有元素。
int frequency(Collection c, Object o)//統(tǒng)計(jì)元素出現(xiàn)次數(shù)
int indexOfSubList(List list, List target)//統(tǒng)計(jì)targe在list中第一次出現(xiàn)的索引,找不到則返回-1,類比int lastIndexOfSubList(List source, list target).
boolean replaceAll(List list, Object oldVal, Object newVal), 用新元素替換舊元素
示例代碼:
ArrayList1.3. 同步控制:arrayList = new ArrayList (); arrayList.add(-1); arrayList.add(3); arrayList.add(3); arrayList.add(-5); arrayList.add(7); arrayList.add(4); arrayList.add(-9); arrayList.add(-7); ArrayList arrayList2 = new ArrayList (); arrayList2.add(-3); arrayList2.add(-5); arrayList2.add(7); System.out.println("原始數(shù)組:"); System.out.println(arrayList); System.out.println("Collections.max(arrayList):"); System.out.println(Collections.max(arrayList)); System.out.println("Collections.min(arrayList):"); System.out.println(Collections.min(arrayList)); System.out.println("Collections.replaceAll(arrayList, 3, -3):"); Collections.replaceAll(arrayList, 3, -3); System.out.println(arrayList); System.out.println("Collections.frequency(arrayList, -3):"); System.out.println(Collections.frequency(arrayList, -3)); System.out.println("Collections.indexOfSubList(arrayList, arrayList2):"); System.out.println(Collections.indexOfSubList(arrayList, arrayList2)); System.out.println("Collections.binarySearch(arrayList, 7):"); // 對(duì)List進(jìn)行二分查找,返回索引,List必須是有序的 Collections.sort(arrayList); System.out.println(Collections.binarySearch(arrayList, 7));
Collectons提供了多個(gè)synchronizedXxx()方法·,該方法可以將指定集合包裝成線程同步的集合,從而解決多線程并發(fā)訪問集合時(shí)的線程安全問題。
我們知道HashSet,TreeSet,ArrayList,LinkedList,HashMap,TreeMap都是線程不安全的。Collections提供了多個(gè)靜態(tài)方法可以把他們包裝成線程同步的集合。
方法如下:
synchronizedCollection(Collectionc) //返回指定 collection 支持的同步(線程安全的)collection。
synchronizedList(Listlist)//返回指定列表支持的同步(線程安全的)List。
synchronizedMap(Mapm) //返回由指定映射支持的同步(線程安全的)Map。
synchronizedSet(Set1.4. 設(shè)置不可變集合:s) //返回指定 set 支持的同步(線程安全的)set。
emptyXxx(): 返回一個(gè)空的、不可變的集合對(duì)象,此處的集合既可以是:List,Set,Map.如emptyList():返回空列表(immutable), 此列表是可序列化的。
singletonXxx(): 返回一個(gè)只包含指定對(duì)象(只有一個(gè)或一個(gè)元素)的不可變的集合對(duì)象,此處的集合可以是:List,Set,Map。如:singletonList(T o):返回一個(gè)只包含指定對(duì)象的不可變列表。,返回的列表是可序列化的。
unmodifiableXxx(): 返回指定集合對(duì)象的不可變視圖,此處的集合可以是:List,Set,Map。如:unmodifiableList(List extends T> list):返回指定列表的不可修改視圖。
上面三類方法的參數(shù)是原有的集合對(duì)象,返回值是該集合的"只讀"版本。
1. Arrays類的常見操作:排序 :sort()
查找 :binarySearch()
比較: equals
填充 :fill
轉(zhuǎn)列表: asList()
哈希:hashCode()
轉(zhuǎn)字符串 :toString()
示例代碼:
/** * TODO Arrays類方法測(cè)試 * 包含用于操作數(shù)組的各種方法(如排序和搜索)。 該類還包含一個(gè)靜態(tài)工廠,可以將數(shù)組視為列表。 * 如果指定的數(shù)組引用為空,則該類中的方法都拋出一個(gè)NullPointerException ,除非另有說明。 * @author 寇爽 * @date 2017年11月20日 * @version 1.8 */ public class ArraysMethodsDemo { public static void main(String[] args) { // *************排序 sort**************** int a[] = { 1, 3, 2, 7, 6, 5, 4, 9 }; // sort(int[] a)方法按照數(shù)字順序排列指定的數(shù)組。 Arrays.sort(a); System.out.println("Arrays.sort(a):"); for (int i : a) { System.out.print(i); } // 換行 System.out.println(); // sort(int[] a,int fromIndex,int toIndex)按升序排列數(shù)組的指定范圍 int b[] = { 1, 3, 2, 7, 6, 5, 4, 9 }; Arrays.sort(b, 2, 6); System.out.println("Arrays.sort(b, 2, 6):"); for (int i : b) { System.out.print(i); } // 換行 System.out.println(); int c[] = { 1, 3, 2, 7, 6, 5, 4, 9 }; // parallelSort(int[] a) 按照數(shù)字順序排列指定的數(shù)組。同sort方法一樣也有按范圍的排序 Arrays.parallelSort(c); System.out.println("Arrays.parallelSort(c):"); for (int i : c) { System.out.print(i); } // 換行 System.out.println(); // parallelSort給字符數(shù)組排序,sort也可以 char d[] = { "a", "f", "b", "c", "e", "A", "C", "B" }; Arrays.parallelSort(d); System.out.println("Arrays.parallelSort(d):"); for (char d2 : d) { System.out.print(d2); } // 換行 System.out.println(); // *************查找 binarySearch()**************** char[] e = { "a", "f", "b", "c", "e", "A", "C", "B" }; System.out.println("Arrays.binarySearch(e, "c"):"); int s = Arrays.binarySearch(e, "c"); System.out.println("字符c在數(shù)組的位置:" + s); // *************比較 equals**************** char[] f = { "a", "f", "b", "c", "e", "A", "C", "B" }; /* * 元素?cái)?shù)量相同,并且相同位置的元素相同。 另外,如果兩個(gè)數(shù)組引用都是null,則它們被認(rèn)為是相等的 。 */ // 輸出true System.out.println("Arrays.equals(e, f):" + Arrays.equals(e, f)); // 輸出false,因?yàn)閿?shù)組d已經(jīng)被排過序,所以數(shù)組d和e雖然由相同元素構(gòu)成,但是相同位置的元素不同 System.out.println("Arrays.equals(d, e):" + Arrays.equals(d, e)); // *************填充fill(批量初始化)**************** int[] g = { 1, 2, 3, 3, 3, 3, 6, 6, 6 }; // 數(shù)組中所有元素重新分配值 Arrays.fill(g, 3); System.out.println("Arrays.fill(g, 3):"); // 輸出結(jié)果:333333333 for (int i : g) { System.out.print(i); } // 換行 System.out.println(); int[] h = { 1, 2, 3, 3, 3, 3, 6, 6, 6, }; // 數(shù)組中指定范圍元素重新分配值 Arrays.fill(h, 0, 2, 9); System.out.println("Arrays.fill(h, 0, 2, 9);:"); // 輸出結(jié)果:993333666 for (int i : h) { System.out.print(i); } // 換行 System.out.println(); // *************復(fù)制copy**************** // copyOf方法實(shí)現(xiàn)數(shù)組復(fù)制,h為數(shù)組,6為復(fù)制的長度 int i[] = Arrays.copyOf(h, 6); System.out.println("Arrays.copyOf(h, 6);:"); // 輸出結(jié)果:993333 for (int j : i) { System.out.print(j); } // 換行 System.out.println(); // copyOfRange將指定數(shù)組的指定范圍復(fù)制到新數(shù)組中 int j[] = Arrays.copyOfRange(h, 6, 11); System.out.println("Arrays.copyOfRange(h, 6, 11):"); // 輸出結(jié)果66600(h數(shù)組只有9個(gè)元素這里是從索引6到索引11復(fù)制所以不足的就為0) for (int j2 : j) { System.out.print(j2); } // 換行 System.out.println(); // *************轉(zhuǎn)列表 asList()**************** /* * 返回由指定數(shù)組支持的固定大小的列表。 * (將返回的列表更改為“寫入數(shù)組”。)該方法作為基于數(shù)組和基于集合的API之間的橋梁,與Collection.toArray()相結(jié)合 。 * 返回的列表是可序列化的,并實(shí)現(xiàn)RandomAccess 。 * 此方法還提供了一種方便的方式來創(chuàng)建一個(gè)初始化為包含幾個(gè)元素的固定大小的列表如下: */ Liststooges = Arrays.asList("Larry", "Moe", "Curly"); System.out.println(stooges); // *************哈希 Hash()**************** char[] k = { "a", "f", "b", "c", "e", "A", "C", "B" }; // 輸出數(shù)組k的hash值 System.out.println(Arrays.hashCode(k)); // *************轉(zhuǎn)字符串 toString()**************** /* * 返回指定數(shù)組的內(nèi)容的字符串表示形式。 字符串表示由數(shù)組元素的列表組成,括在方括號(hào)( "[]" )中。 * 相鄰的元素由字符", "分隔(逗號(hào)后跟一個(gè)空格)。 元素被轉(zhuǎn)換為字符串由String.valueOf(int)。 * 返回"null"如果a是null。 */ // 輸出結(jié)果:[a, f, b, c, e, A, C, B] System.out.println(Arrays.toString(k)); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/68956.html
摘要:原文出自本文總結(jié)了程序員常犯的個(gè)錯(cuò)誤??梢钥纯礊槭裁丛谥斜辉O(shè)計(jì)成不可變父類和子類的構(gòu)造函數(shù)以上這段代碼出現(xiàn)編譯錯(cuò)誤,因?yàn)槟J(rèn)的父類構(gòu)造函數(shù)未定義。如果程序員定義構(gòu)造函數(shù),編譯器將不插入默認(rèn)的無參數(shù)構(gòu)造函數(shù)。 原文出自:http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/ 本文總結(jié)了J...
摘要:單線程集合本部分將重點(diǎn)介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營中唯一的有序集合。該功能能有效防止運(yùn)行時(shí)造型。檢查個(gè)集合之間不存在共同的元素?;谧匀慌判蚧蛘页黾现械淖畲蠡蜃钚≡?。 【編者按】本文作者為擁有十年金融軟件開發(fā)經(jīng)驗(yàn)的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國內(nèi) ITOM 管理平臺(tái) O...
摘要:首當(dāng)其沖的便是接口中的每個(gè)聲明必須是即便不指定也是,并且不能設(shè)置為非,詳細(xì)規(guī)則可參考可見性部分介紹。函數(shù)式接口有著不同的場(chǎng)景,并被認(rèn)為是對(duì)編程語言的一種強(qiáng)大的擴(kuò)展。抽象類與中的接口有些類似,與中支持默認(rèn)方法的接口更為相像。 原文鏈接:http://www.javacodegeeks.com/2015/09/how-to-design-classes-and-interfaces.htm...
摘要:與辨析聲明文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處比較三種狀態(tài)根據(jù)需求定義序升序降序返回負(fù)數(shù),表示比較兩元素滿足序,無須調(diào)整,返回,表示比較兩元素相等,無須調(diào)整位置,返回正數(shù),表示比較兩元素不滿足序,按序調(diào)整位置對(duì)象內(nèi)部排序源碼繼承接口的對(duì)象必 Comparator與Comparable辨析 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處:[1] https://segmentfault.co...
摘要:排序的算法是歸并排序。舉個(gè)例子,的算法可以不是使用歸并排序,但是該算法一定要是穩(wěn)定的。這個(gè)類是的一部分。官方這個(gè)類只包含操作或返回集合的靜態(tài)方法。具體來說是,第一步,先把集合轉(zhuǎn)換為數(shù)組,第二步,調(diào)用。和沒有什么區(qū)別,只是傳參有點(diǎn)不同。 Arrays 1.作用看類的名字,就知道是對(duì)數(shù)組(數(shù)據(jù)類型[])進(jìn)行各種操作。例如,排序、查找、復(fù)制等。 排序的算法是歸并排序。查找的算法是二分查找。復(fù)...
閱讀 3145·2021-11-19 09:40
閱讀 2446·2021-10-14 09:42
閱讀 1725·2021-09-22 15:34
閱讀 1456·2019-08-30 15:55
閱讀 791·2019-08-29 12:59
閱讀 423·2019-08-28 18:28
閱讀 1832·2019-08-26 13:42
閱讀 1536·2019-08-26 13:29