天天看點

Collections的簡單學習

<code>package</code> <code>com.hanchao.test;</code>

<code>import</code> <code>java.util.ArrayList;</code>

<code>import</code> <code>java.util.Arrays;</code>

<code>import</code> <code>java.util.Collections;</code>

<code>import</code> <code>java.util.Enumeration;</code>

<code>import</code> <code>java.util.List;</code>

<code>import</code> <code>java.util.Vector;</code>

<code>/**</code>

<code> </code><code>* java.util.Collections的簡單學習</code>

<code> </code><code>* @author liweihan ([email protected])</code>

<code> </code><code>* @version 1.0 (2016年1月13日 上午10:20:51)</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>TestCollections {</code>

<code>    </code><code>public</code> <code>static</code> <code>void</code> <code>main(String[] args) {</code>

<code>        </code> 

<code>        </code><code>/**</code>

<code>         </code><code>* java.util.Collections 是一個包裝類。它包含有各種有關集合的操作的靜态多态方法。</code>

<code>         </code><code>* 此類不能執行個體化,就像一個工具類,服務于java的Collection架構。</code>

<code>         </code><code>* </code>

<code>         </code><code>* 參考:</code>

<code>         </code><code>*      http://www.apihome.cn/api/java/Collections.html</code>

<code>         </code><code>*/</code>

<code>         </code><code>* 1.排序sort()</code>

<code>         </code><code>* 根據元素的自然順序 對指定清單按升序進行排序。清單中的所有元素都必須實作 Comparable 接口。</code>

<code>         </code><code>* 此外,清單中的所有元素都必須是可互相比較的(也就是說,</code>

<code>         </code><code>* 對于清單中的任何 e1 和 e2 元素,e1.compareTo(e2) </code>

<code>         </code><code>* 不得抛出 ClassCastException</code>

<code>        </code><code>List&lt;Double&gt; list = </code><code>new</code> <code>ArrayList&lt;Double&gt;();</code>

<code>        </code><code>list.add(112D);</code>

<code>        </code><code>list.add(113D);</code>

<code>        </code><code>list.add(23D);</code>

<code>        </code><code>list.add(456D);</code>

<code>        </code><code>list.add(231D);</code>

<code>        </code><code>Collections.sort(list);</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; list.size(); i++) {</code>

<code>            </code><code>System.out.println(list.get(i));</code>

<code>        </code><code>}</code>

<code>        </code><code>//結果:23.0 112.0 113.0 231.0 456.0</code>

<code>         </code><code>* 2.混排</code>

<code>         </code><code>* 混排算法所做的正好與 sort 相反: 它打亂在一個 List 中可能有的任何排列的蹤迹。</code>

<code>         </code><code>* 也就是說,基于随機源的輸入重排該 List,這樣的排列具有相同的可能性(假設随機源是公正的)。</code>

<code>         </code><code>* 這個算法在實作一個碰運氣的遊戲中是非常有用的。</code>

<code>         </code><code>* 例如,它可被用來混排代表一副牌的Card 對象的一個 List 。另外,在生成測試案例時,它也是十分有用的。</code>

<code>        </code><code>Collections.shuffle(list);</code>

<code>        </code><code>System.out.println(</code><code>"混排:"</code><code>);</code>

<code>        </code><code>//結果:113.0 456.0 112.0 23.0 112.0 231.0</code>

<code>         </code><code>* 3.反轉reverse()</code>

<code>         </code><code>* 使用Reverse方法可以根據元素的自然順序 對指定清單按降序進行排序。</code>

<code>        </code><code>Collections.reverse(list);</code>

<code>        </code><code>System.out.println(</code><code>"反轉:"</code><code>);</code>

<code>        </code><code>//結果:231.0 112.0 23.0 112.0 456.0 113.0</code>

<code>         </code><code>* 4.fill()</code>

<code>         </code><code>* 使用指定元素替換指定清單中的所有元素。</code>

<code>        </code><code>List&lt;String&gt; list2 = </code><code>new</code> <code>ArrayList&lt;String&gt;();</code>

<code>        </code><code>list2.add(</code><code>"aa"</code><code>);</code>

<code>        </code><code>list2.add(</code><code>"bb"</code><code>);</code>

<code>        </code><code>list2.add(</code><code>"cc"</code><code>);</code>

<code>        </code><code>list2.add(</code><code>"dd"</code><code>);</code>

<code>        </code><code>Collections.fill(list2,</code><code>"hanchao"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"替換:"</code><code>);</code>

<code>        </code><code>for</code><code>(String string : list2) {</code>

<code>            </code><code>System.out.println(string);</code>

<code>        </code><code>//結果:hanchao hanchao hanchao hanchao</code>

<code>         </code><code>* 5.copy()</code>

<code>         </code><code>* 将所有元素從一個清單複制到另一個清單。</code>

<code>         </code><code>* 執行此操作後,目标清單中每個已複制元素的索引将等同于源清單中該元素的索引。</code>

<code>         </code><code>* 目标清單的長度至少必須等于源清單。</code>

<code>         </code><code>* 如果目标清單更長一些,也不會影響目标清單中的其餘元素。</code>

<code>        </code><code>List&lt;String&gt; list3 = </code><code>new</code> <code>ArrayList&lt;String&gt;();</code>

<code>        </code><code>list3.add(</code><code>"list31"</code><code>);</code>

<code>        </code><code>list3.add(</code><code>"list32"</code><code>);</code>

<code>        </code><code>list3.add(</code><code>"list33"</code><code>);</code>

<code>        </code><code>List&lt;String&gt; list4 = </code><code>new</code> <code>ArrayList&lt;String&gt;();</code>

<code>        </code><code>list4.add(</code><code>"copy1"</code><code>);</code>

<code>        </code><code>list4.add(</code><code>"copy2"</code><code>);</code>

<code>        </code><code>list4.add(</code><code>"copy3"</code><code>);</code>

<code>//      list4.add("copy4");</code>

<code>        </code><code>Collections.copy(list3, list4); </code><code>//list4是源 ,list4的長度必須&lt;=list3.size()</code>

<code>        </code><code>System.out.println(</code><code>"複制:"</code><code>);</code>

<code>        </code><code>for</code> <code>(String str : list3) {</code>

<code>            </code><code>System.out.println(str);</code>

<code>         </code><code>* 6.min()</code>

<code>         </code><code>* 根據元素的自然順序 傳回給定 collection 的最小元素。</code>

<code>         </code><code>* collection 中的所有元素都必須實作 Comparable 接口。</code>

<code>         </code><code>* 此外,collection 中的所有元素都必須是可互相比較的(也就是說,</code>

<code>         </code><code>* 對于 collection 中的任意 e1 和 e2 元素,e1.compareTo(e2) </code>

<code>         </code><code>* 不得抛出 ClassCastException)。</code>

<code>         </code><code>* max()</code>

<code>         </code><code>* 根據元素的自然順序,傳回給定 collection 的最大元素。</code>

<code>         </code><code>* 對于 collection 中的任意 e1 和 e2 元素,</code>

<code>         </code><code>* e1.compareTo(e2) 不得抛出 ClassCastException)。</code>

<code>        </code><code>List&lt;Double&gt; list5 = </code><code>new</code> <code>ArrayList&lt;Double&gt;();</code>

<code>        </code><code>list5.add(112D);</code>

<code>        </code><code>list5.add(113D);</code>

<code>        </code><code>list5.add(23D);</code>

<code>        </code><code>list5.add(456D);</code>

<code>        </code><code>list5.add(231D);</code>

<code>        </code><code>System.out.println(</code><code>"最小元素:"</code> <code>+ Collections.min(list5));</code>

<code>        </code><code>System.out.println(</code><code>"最大元素:"</code> <code>+ Collections.max(list5));</code>

<code>         </code><code>* 7.indexOfSubList(List,list) </code>

<code>         </code><code>*   傳回指定源清單中第一次出現指定目标清單的起始位置;</code>

<code>         </code><code>*   如果沒有出現這樣的清單,則傳回 -1。</code>

<code>         </code><code>*   </code>

<code>         </code><code>*   lastIndexOfSubList(List,list)</code>

<code>         </code><code>*   傳回指定源清單中最後一次出現指定目标清單的起始位置;</code>

<code>         </code><code>*   binarySearch(list,key)</code>

<code>         </code><code>*   查找指定集合中的元素,傳回所查找元素的索引。</code>

<code>        </code><code>double</code> <code>array[] = {</code><code>112</code><code>, </code><code>111</code><code>, </code><code>23</code><code>, </code><code>456</code><code>,</code><code>111</code><code>, </code><code>231</code> <code>};</code>

<code>        </code><code>List&lt;Double&gt; list6 = </code><code>new</code> <code>ArrayList&lt;Double&gt;();</code>

<code>        </code><code>List&lt;Double&gt; li = </code><code>new</code> <code>ArrayList&lt;Double&gt;();</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; array.length; i++) {</code>

<code>            </code><code>list6.add(</code><code>new</code> <code>Double(array[i]));</code>

<code>        </code><code>double</code> <code>arr[] = {</code><code>111</code><code>};</code>

<code>        </code><code>for</code><code>(</code><code>int</code> <code>j=</code><code>0</code><code>;j&lt;arr.length;j++){</code>

<code>            </code><code>li.add(</code><code>new</code> <code>Double(arr[j]));</code>

<code>        </code><code>int</code> <code>locations = Collections.lastIndexOfSubList (list6,li);</code>

<code>        </code><code>int</code> <code>locations2 = Collections.indexOfSubList(list6, li);</code>

<code>        </code><code>int</code> <code>locations3 = Collections.binarySearch(list6, 23d);</code>

<code>        </code><code>System.out.println(</code><code>"=== lastIndexOfSubList:"</code> <code>+ locations);</code>

<code>        </code><code>System.out.println(</code><code>"=== indexOfSubList:"</code> <code>+ locations2);</code>

<code>        </code><code>System.out.println(</code><code>"=== binarySearch:"</code> <code>+ locations3);</code>

<code>        </code><code>//結果:=== lastIndexOfSubList:4</code>

<code>        </code><code>//結果:=== indexOfSubList:1</code>

<code>        </code><code>//結果:=== binarySearch:2</code>

<code>         </code><code>* 8.rotate()</code>

<code>         </code><code>* 根據指定的距離輪換指定清單中的元素。調用此方法後,</code>

<code>         </code><code>* 對于 0 和 list.size()-1(包括)之間的所有 i 值,</code>

<code>         </code><code>* 索引 i 處的元素将是以前位于索引 (i - distance) mod list.size() 處的元素。</code>

<code>         </code><code>* (此方法對清單的大小沒有任何影響。) </code>

<code>        </code><code>String[] str = {</code><code>"t"</code><code>,</code><code>"a"</code><code>,</code><code>"n"</code><code>,</code><code>"k"</code><code>,</code><code>"s"</code><code>};</code>

<code>        </code><code>List&lt;String&gt; list7 = </code><code>new</code> <code>ArrayList&lt;String&gt;();</code>

<code>        </code><code>for</code> <code>(</code><code>int</code> <code>i = </code><code>0</code><code>; i &lt; str.length; i++) {</code>

<code>            </code><code>list7.add(str[i]);</code>

<code>//      Collections.rotate(list7, -4);//如果是負數,則左移</code>

<code>        </code><code>Collections.rotate(list7, </code><code>2</code><code>);</code><code>//如果是正數,則右移</code>

<code>        </code><code>System.out.println(</code><code>"位移:"</code><code>);</code>

<code>        </code><code>for</code><code>(String s : list7) {</code>

<code>            </code><code>System.out.println(s);</code>

<code>         </code><code>* 9.replaceAll(list,old,new)</code>

<code>         </code><code>* 替換指定的元素,若要替換的值存在則傳回true,反之則傳回false</code>

<code>        </code><code>List&lt;String&gt; list8 = Arrays.asList(</code><code>"one two three four five six siven"</code><code>.split(</code><code>" "</code><code>));</code>

<code>        </code><code>System.out.println(list8);</code>

<code>        </code><code>//[one, two, three, four, five, six, siven]</code>

<code>        </code><code>Collections.replaceAll(list8, </code><code>"siven"</code><code>, </code><code>"siven eight nine"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"---:"</code> <code>+ list8);</code>

<code>        </code><code>//---:[one, two, three, four, five, six, siven eight nine]</code>

<code>         </code><code>* 10.swap(List list,int i,int j)</code>

<code>         </code><code>* 在指定清單的指定位置處交換元素。</code>

<code>         </code><code>* (如果指定位置相同,則調用此方法不會更改清單。)</code>

<code>        </code><code>List&lt;String&gt; list10 = Arrays.asList(</code><code>"one two three four five six siven"</code><code>.split(</code><code>" "</code><code>));</code>

<code>        </code><code>System.out.println(</code><code>"***:"</code> <code>+ list10);</code>

<code>        </code><code>//***:[one, two, three, four, five, six, siven]</code>

<code>        </code><code>Collections.swap(list10, </code><code>3</code><code>, </code><code>5</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"---:"</code> <code>+ list10);</code>

<code>        </code><code>//---:[one, two, three, six, five, four, siven]</code>

<code>         </code><code>* </code><code>11</code><code>.nCopies(</code><code>int</code> <code>n,Object </code><code>0</code><code>)</code>

<code>         </code><code>* 傳回大小為n的List ,List不可改變,其中的所有引用都指向o</code>

<code>        </code><code>List&lt;String&gt; list11 = </code><code>new</code> <code>ArrayList&lt;String&gt;();</code>

<code>        </code><code>list11 = Collections.nCopies(</code><code>5</code><code>, </code><code>"hello"</code><code>);</code>

<code>        </code><code>System.out.println(</code><code>"$$$:"</code> <code>+ list11);</code>

<code>        </code><code>//$$$:[hello, hello, hello, hello, hello]</code>

<code>         </code><code>* 12.enumeration(Collection)</code>

<code>         </code><code>*    傳回一個指定 collection 上的枚舉。</code>

<code>         </code><code>*    此方法提供與遺留 API 的互操作性,遺留 API 需要一個枚舉作為輸入。 </code>

<code>        </code><code>List&lt;String&gt; list12 = Arrays.asList(</code><code>"I love you xiao jie !"</code><code>.split(</code><code>" "</code><code>));</code>

<code>        </code><code>System.out.println(</code><code>"---:"</code> <code>+ list12);</code>

<code>        </code><code>//---:[I, love, you, xiao, jie, !]</code>

<code>        </code><code>Enumeration&lt;String&gt; e = Collections.enumeration(list12);</code>

<code>        </code><code>Vector&lt;String&gt; v = </code><code>new</code> <code>Vector&lt;String&gt;();</code>

<code>        </code><code>while</code> <code>(e.hasMoreElements()) {</code>

<code>            </code><code>v.addElement(e.nextElement());</code>

<code>        </code><code>System.out.println(</code><code>" v :"</code> <code>+ v);</code>

<code>        </code><code>//v :[I, love, you, xiao, jie, !]</code>

<code>    </code><code>}</code>

<code>    </code> 

<code>}</code>

     本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/1734707,如需轉載請自行聯系原作者