黑马程序员--集合工具类(要了解)

来源:互联网 发布:大学生网络信贷案例 编辑:程序博客网 时间:2024/06/05 05:57

----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

集合框架的工具类。
Collections:集合框架的工具类。里面定义的都是静态方法。


Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。


Collections是集合框架中的一个工具类。该类中的方法都是静态的
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
//查找
int  binarySearch(List list, T key) 
使用二分搜索法搜索指定列表,以获得指定对象。
int  binarySearch(List list, T key, Comparator c) 
使用二分搜索法搜索指定列表,以获得指定对象。
T  max(Collection coll, Comparator comp) 
          根据指定比较器产生的顺序,返回给定 collection 的最大元素。
T  min(Collection coll, Comparator comp) 
          根据指定比较器产生的顺序,返回给定 collection 的最小元素。 


//替换
void  fill(List list, T obj)
使用指定元素替换指定列表中的所有元素。
boolean replaceAll(List list, T oldVal, T newVal) 
          使用另一个值替换列表中出现的所有某一指定值。 


//反转
Comparator reverseOrder() 
          返回一个比较器,它强行逆转实现了 Comparable 接口的对象 collection 的自然顺序。 
Comparator reverseOrder(Comparator cmp) 
          返回一个比较器,它强行逆转指定比较器的顺序。 


//排序
void shuffle(List list) 
          使用默认随机源对指定列表进行置换。 
void  sort(List list) 
          根据元素的自然顺序 对指定列表按升序进行排序。 
void  sort(List list, Comparator c) 
          根据指定比较器产生的顺序对指定列表进行排序。 


//加锁
List synchronizedList(List list) 
          返回指定列表支持的同步(线程安全的)列表。
Map synchronizedMap(Map m) 
          返回由指定映射支持的同步(线程安全的)映射。 
Set synchronizedSet(Set s) 
          返回指定有序映射支持的同步(线程安全的)有序映射。 


import java.util.*;import static java.util.Collections.*;class ToolsDemo{public static void main(String[] args){List<String> list = new ArrayList<String>();list.add("java01");list.add("java04");list.add("java02");list.add("java03");sort(list);sop(list);//sop(binarySearch(list,"java02");//sop(binarySearch(list,"java02",new MyComparator()));//二分查找要点:要是有序的。//sop(max(list,new MyComparator()));//sop(min(list,new MyComparator()));//fill(list,"123");//replaceAll(list,"java01","123");//sop(binarySearch(list,"java02",reverseOrder(new MyComparator())));//shuffle(list);//sop(list);sop(synchronizedList(list));}public static void sop(Object obj){System.out.println(obj);}}class MyComparator implements Comparator<String>{public int compare(String s1,String s2){return s1.compareTo(s2);}}

Arrays:用于操作数组的工具类。
里面都是静态方法。
//这个方法比较特殊
List asList([]):将数组变成list集合
把数组变成list集合有什么好处?
可以使用集合的思想和方法来操作数组中的元素。


注意:将数组变成集合,不可以使用集合的增删方法。
因为数组的长度是固定。
如果你增删。那么会反生UnsupportedOperationException,
可以使用
contains。
get
indexOf()
subList();
如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素。
如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。


//上面的方法换成其它数据类型也适用。
void sort(int[] a) 
          对指定的 int 型数组按数字升序进行排序。
void sort(int[] a, int fromIndex, int toIndex) 
          对指定 int 型数组的指定范围按数字升序进行排序。 
int binarySearch(int[] a, int key)
          使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
void fill(int[] a, int val) 
          将指定的 int 值分配给指定 int 型数组的每个元素。
void fill(int[] a, int fromIndex, int toIndex, int val) 
          将指定的 int 值分配给指定 int 型数组指定范围中的每个元素。
String toString(int[] a) 
          返回指定数组内容的字符串表示形式。 


import java.util.*;class  ToolsDemo2{public static void main(String[] args) {int[] arr = {2,4,5};sop("int[] arr = {2,4,5};");sop("Arrays.toString(arr):  "+Arrays.toString(arr)+"\n");String[] arr1 = {"abc","cc","kkkk"};sop("String[] arr1 = {\"abc\",\"cc\",\"kkkk\"};");sop("Arrays.asList(arr1).contains(\"cc\"):  "+Arrays.asList(arr1).contains("cc")+"\n");//list.add("qq");//UnsupportedOperationException,int[] nums = {2,4,5};sop("int[] nums = {2,4,5};");sop("Arrays.asList(nums):  "+Arrays.asList(nums)+"\n");Integer[] nums2 = {2,4,5};sop("Integer[] nums2 = {2,4,5};");sop("Arrays.asList(nums2):  "+Arrays.asList(nums2));}public static void sop(Object obj){System.out.println(obj);}}

集合变数组。

Collection接口中的toArray方法。


1,指定类型的数组到底要定义多长呢?
当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size。
当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。
所以创建一个刚刚好的数组最优。

2,为什么要将集合变数组?
为了限定对元素的操作。不需要进行增删了。


import java.util.*;class  ToolsDemo3{public static void main(String[] args) {ArrayList<String> al = new ArrayList<String>();al.add("abc1");al.add("abc2");al.add("abc3");String[] arr = al.toArray(new String[al.size()]);//重点。。System.out.println(Arrays.toString(arr));}}



----------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

0 0
原创粉丝点击