(19)集合工具类

来源:互联网 发布:js分割数字 编辑:程序博客网 时间:2024/06/14 18:29

1…Collections

 

Collections用于对集合进行操作的工具类,里面都是静方法

 

1.1…sort()方法

 

a…

static <T extends Comparable<? superT>> 对list集合进行排序...泛型定义在方法上了

void

 sort(List<T> list)

         根据元素的自然顺序 对指定列表按升序进行排序。

这个T元素可以是任意类型但是必须具备比较性,所以就要对定义的泛型进行一下泛型的限定T extendsComparable<? super T>,,T必须是Comparable的子类,

 

b…

 

static <T> void   // 这里的<T>不用做泛型限定,,,这里有了比较器了就不用看对象的自然顺序了

 sort(List<T> list, Comparator<? superT> c)      传个比较器进行排序

 

代码:

//自定义一个比较器

class StrLenComparator implementsComparator<String>   比较器

{

       publicint compare(String s1,String s2)

       {

              if(s1.length()>s2.length())

                     return1;

              if(s1.length()<s2.length())

                     return-1;

              returns1.compareTo(s2);

       }

}

 

 

1.2…max方法

 

获取一堆对象中的最大元素,,这对象必须具备比较性,,,,<T extends Object& Comparable<? super T>>泛型限定,,只有这个传入的集合里的元素具备比较性才能取出最大值

 

static <T extends Object &Comparable<? super T>> T   

 max(Collection<? extends T> coll)

         根据元素的自然顺序,返回给定collection 的最大元素。

参数:

coll - 将确定其最大元素的 collection。

返回:

根据元素的自然顺序 返回给定 collection 的最大元素。

 

 

1.3.. binarySearch()方法

 

对集合进行二分查找,,但这集合必须是list集合,因为list有索引二分查找涉及到角标,,,使用binarySearch时集合必须是有序集合

 

static <T> int

 binarySearch(List<? extends Comparable<?super T>> list, T key)

         使用二分搜索法搜索指定列表,以获得指定对象。 在进行此调用之前,必须根据列表元素的自然顺序对列表进行升序排序(通过sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

 

 

在使用binarySearch方法时list集合里面的元素不带比较性那么就用比较器

public static <T> intbinarySearch(List<? extends T> list,

                                   T key,

                                  Comparator<? super T> c)

 

 

1.4.。。替换:

 

a…

static <T> void

 fill(List<? super T> list, T obj)

         使用指定元素替换指定列表中的所有元素。

参数:

list - 使用指定元素填充的列表。

obj - 用来填充指定列表的元素。

fill方法可以将list集合中的所有元素替换成指定元素。

 

b…

将list集合中部分元素替换成指定元素。

 List<E> subList(int fromIndex, inttoIndex) 返回list集合中的一部分

         返回列表中指定的fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

 

c….

static <T> booleanreplaceAll(List<T> list, T oldVal, T newVal)

         使用另一个值替换列表中出现的所有某一指定值。更确切地讲,使用 newVal 替换 list 中满足(oldVal==null ? e==null : oldVal.equals(e)) 的每个 e 元素。(此方法对列表的大小没有任何影响。)

参数:

list - 在其中进行替换的列表。

oldVal - 将被替换的原值。

newVal - 替换 oldVal 的新值。

 

 

1.5…reverseOrder()

 

static <T> Comparator<T>reverseOrder()

         返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 将按照逆字典(字母)顺序对数组进行排序。

 

代码:

public static void orderDemo()

       {

              TreeSet<String>ts = new TreeSet<String>(Collections.reverseOrder());  传一个逆向比较器,就是把ts集合里面按元素的自然顺序排序的元素(aaa,abcde,cc,k)全部倒转,,reverseOrder()方法是把 按元素的自然顺序排序的集合倒序,,Collections.reverseOrder()就返回一个比较器,,,只是这个比较器是把 按元素的自然顺序排序的集合倒序

 

              ts.add("abcde");

              ts.add("aaa");

              ts.add("k");

              ts.add("cc");

 

              Iteratorit = ts.iterator();

              while(it.hasNext())

              {

                     System.out.println(it.next());

              }

       }

 

 

1.6.. synchronizedCollection()

 

集合中那么多的对象都不是线程安全的,,高效,,多线程操作时就出问题了,,那可以自己加锁,,集合里面的添加和删除方法都得封装到一个锁里面去,在某一个时刻只能有一个线程进行添加或者删除,,但是自己加锁很麻烦,,,,Collections集合工具类提供了一个synchronizedCollection方法意思是你把你那个不安全的集合交给我,,我给你一个安全的集合,,把你那个不同步的集合交给我,,我给你一个同步的集合

 

static <T> List<T>

 synchronizedList(List<T> list)

         返回指定列表支持的同步(线程安全的)列表。

static <K,V> Map<K,V>

 synchronizedMap(Map<K,V> m)

         返回由指定映射支持的同步(线程安全的)映射。

 

 

1.7…swap交换元素位置

 

static void swap(List<?> list, int i,int j) 把集合里的角标i和j的元素调换了,,,变为角标i的元素是原来角标j的元素

         在指定列表的指定位置处交换元素。 注意; swap方法不能操作treeset集合,只能操作list,因为list有索引,,swap方法操作角标

 

 

1.8…shuffle()随机交换位置

 

static void shuffle(List<?> list)

         使用默认随机源对指定列表进行置换。 对集合的位置进行随机置换,所有置换发生的可能性都是大致相等的。,就是对集合所有的元素进行掉乱顺序

static void shuffle(List<?> list,Random rnd)

         使用指定的随机源对指定列表进行置换。

 

 

 

2…Arrays数组工具类

Arrays:用于操作数组的工具类。Arrays是操作数组的

里面都是静态方法。binarySearch方法可以对多种数据类型的数据进行二分查找,,这样我们就不用自己写折半查找的方法了

 

方法:

 

a…

asList:将数组变成list集合

 

static <T> List<T>

 asList(T... a) 参数是数组,,他可以把数组变为list集合

         返回一个受指定数组支持的固定大小的列表。

 

b…

public static boolean equals(boolean[] a,

                             boolean[] a2)如果两个指定的 boolean 型数组彼此相等,则返回 true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。此外,如果两个数组引用都为 null,则认为它们是相等的。

 

他在比较的是2个数组中的内容是否相同

 

 

c…

static void fill(int[] a, int val)  数组里的所有元素替换成val

         将指定的 int 值分配给指定 int 型数组的每个元素。

 

d…

static int hashCode(boolean[] a) 获取数组的哈希值

         基于指定数组的内容返回哈希码。

 

e…

static void sort(int[] a)  对数组进行排序

         对指定的 int 型数组按数字升序进行排序。

 

static void sort(double[] a, int fromIndex,int toIndex) 对数组里面一定范围内的数据进行排序,比如对数组里0-3包括2位置上的元素进行排序,,其他位置不动

         对指定 double 型数组的指定范围按数字升序进行排序。

 

 

f…

static String toString(int[] a)

         返回指定数组内容的字符串表示形式。 让数组变成字符串

 

 

3…. 集合变数组

 

集合变数组。

Collection接口中的toArray方法。

 

Object[] toArray()

         返回包含此collection 中所有元素的数组。 这个变为数组以后返回object类型的数组,因为他没有泛型

 

 

a..,指定类型的数组到底要定义多长呢?

              当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。比如是new String[1]时这个数组的长度小于集合的大小,new String[1数组里面只能装一个元素,装不下集合的3个元素,那么他就创建一个新的数组长度是集合的大小

              当指定类型的数组长度大于了集合的size,就不会新创建数组。而是使用传递进来的数组。比如newString[4]就有一个元素是null,集合只有3个元素,,放到newString[4]数组里面时有一个元素就为null,,newString[4]数组装完集合的3个元素后有2个位置是空的

              所以创建一个刚刚好的数组最优。new String[al.size()]的长度等于集合的长度,,如果长度小于集合的大小那么内存中又多了个数组,因为他新创建了一个数组

             

 

b,数组变集合是为了用集合的方法,,,为什么要将集合变数组?

              为了限定对元素的操作。不需要进行增删了。比如我自己创建了一个集合把集合给别人后,他可以增删,而我不需要对这个集合进行增删进行改变,对方只能查看我的集合不能改变,所以对方没有必要增删,所以我就这集合变成数组给你,,你只能进行查询,你不能增删,,,增删是我做的,那么我可以把集合变成数组再给他,那么他拿到的就是数组就不能进行增删了

 

原创粉丝点击