天天看点

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,如需转载请自行联系原作者