两个工具类Collections 和Arrays

来源:互联网 发布:网络神曲歌曲小鸡 编辑:程序博客网 时间:2024/06/06 00:57

集合框架工具类之Collections:

特点:方法均为静态方法。

常用方法如下:

static <T> intbinarySearch(List<? extendsComparable<? super T>> list, T key)
          使用二分搜索法搜索指定列表,以获得指定对象。static <T> intbinarySearch(List<? extends T> list, T key, Comparator<? super T> c)
          使用二分搜索法搜索指定列表,以获得指定对象。static <T> voidfill(List<? super T> list, T obj)
          使用指定元素替换指定列表中的所有元素。static <T extends Object & Comparable<? super T>>
T
max(Collection<? extends T> coll)
          根据元素的自然顺序,返回给定 collection 的最大元素。static <T> Tmax(Collection<? extends T> coll,Comparator<? super T> comp)
          根据指定比较器产生的顺序,返回给定 collection 的最大元素。static <T extends Object & Comparable<? super T>>
T
min(Collection<? extends T> coll)
          根据元素的自然顺序 返回给定 collection 的最小元素。static <T> Tmin(Collection<? extends T> coll,Comparator<? super T> comp)
          根据指定比较器产生的顺序,返回给定 collection 的最小元素。static <T> booleanreplaceAll(List<T> list, T oldVal, T newVal)
          使用另一个值替换列表中出现的所有某一指定值。static voidreverse(List<?> list)
          反转指定列表中元素的顺序。static <T> Comparator<T>reverseOrder()
          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序static <T> Comparator<T>reverseOrder(Comparator<T> cmp)
          返回一个比较器,它强行逆转指定比较器的顺序。static voidshuffle(List<?> list)
          使用默认随机源对指定列表进行置换。static <T extends Comparable<? super T>>
void
sort(List<T> list)
          根据元素的自然顺序 对指定列表按升序进行排序。static <T> voidsort(List<T> list,Comparator<? super T> c)
          根据指定比较器产生的顺序对指定列表进行排序。static voidswap(List<?> list, int i, int j)
          在指定列表的指定位置处交换元素。

枚举类型------》集合类型

static <T> ArrayList<T>list(Enumeration<T> e)
          返回一个数组列表,它按返回顺序包含指定枚举返回的元素。

集合类型------》枚举类型

static <T> Enumeration<T>enumeration(Collection<T> c)
          返回一个指定 collection 上的枚举。

不同步的集合-----------》同步

static <T> Collection<T>synchronizedCollection(Collection<T> c)
          返回指定 collection 支持的同步(线程安全的)collection。static <T> List<T>synchronizedList(List<T> list)
          返回指定列表支持的同步(线程安全的)列表。static <K,V> Map<K,V>synchronizedMap(Map<K,V> m)
          返回由指定映射支持的同步(线程安全的)映射。static <T> Set<T>synchronizedSet(Set<T> s)
          返回指定 set 支持的同步(线程安全的)set。

sort方法的自定义实现:

public static <T extends Comparable<? super T>> void mySort(List<T> list){for (int i = 0; i < list.size()-1; i++) {for (int j = i+1; j < list.size(); j++) {if(list.get(i).compareTo(list.get(j))>0){//T temp = list.get(i);//list.set(i, list.get(j));//list.set(j, temp);Collections.swap(list, i, j);}}}}}

public static <T> void mySort(List<T> list,Comparator<? super T> comp){for (int i = 0; i < list.size()-1; i++) {for (int j = i+1; j < list.size(); j++) {if(comp.compare(list.get(i), list.get(j))>0){//T temp = list.get(i);//list.set(i, list.get(j));//list.set(j, temp);Collections.swap(list, i, j);}}}}
不同步的ArrayList--------》同步的

给非同步的集合加锁。class MyCollections{public static  List synList(List list){return new MyList(list);}private class MyList implements List{private List list;private static final Object lock = new Object();MyList(List list){this.list = list;}public boolean add(Object obj){synchronized(lock){return list.add(obj);}}public boolean remove(Object obj){synchronized(lock){return list.remove(obj);}}}}<pre name="code" class="html">List list = new ArrayList();//非同步的。list = MyCollections.synList(list);//返回一个同步的list.
 


集合框架工具类之Arrays:

特点:方法均为静态

常用方法:

Arrays.toString(type[] name);字符串形式返回数组内容

Arrays.binarySearch(type[] name,type val);二分查找

Arrays.sort(type[] name);数组排序

Arrays.equals(type[] name1,type[] name2);判断两数组是否相等

重点方法:

数组--------》集合

好处:其实可以使用集合的方法操作数组中的元素。

static <T> List<T>asList(T... a)
          返回一个受指定数组支持的固定大小的列表。 使用该方法注意点:

    1.   数组的长度是固定的,所以对于集合的增删方法是不可以使用的
          否则会发生UnsupportedOperationException

 String[] arr = {"abc","haha","xixi"};  List<String> list = Arrays.asList(arr);  list.add("hiahia");<span style="color:#FF0000;">Exception in thread "main" java.lang.UnsupportedOperationException</span>
  2.如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行集合存储。
     如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储。
int[] arr = {31,11,51,61};         List<int[]> list = Arrays.asList(arr);         System.out.println(list);》》[[I@544a5ab2] Integer[] arr = {31,11,51,61};         List<Integer> list = Arrays.asList(arr);         System.out.println(list);》》[31, 11, 51, 61]
集合---------》数组

Collection接口中的toArray()方法

好处:可以对集合中的元素操作的方法进行限定。不允许对其进行增删。

<T> T[]toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。       返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。如果指定的数组能容纳该 collection,则返回包含此 collection 元素的数组。否则,将分配一个具有指定数组的运行时类型和此 collection 大小的新数组。

      如果指定的数组能容纳 collection,并有剩余空间(即数组的元素比 collection 的元素多),那么会将数组中紧接 collection 尾部的元素设置为null。(只有 在调用者知道此 collection 没有包含任何 null 元素时才能用此方法确定 collection 的长度。)

简单来说:toArray方法需要传入一个指定类型的数组。
               长度该如何定义呢?
               如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组。
               如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其他位置默认为null。
              所以建议,最后长度就指定为,集合的size。

 List<String> list = new ArrayList<String>(); list.add("abc1"); list.add("abc2"); list.add("abc3"); String[] arr = list.toArray(new String[list.size()]); System.out.println(Arrays.toString(arr));



0 0