黑马程序员——集合Collections,集合Arrays

来源:互联网 发布:Ubuntu 自动获取ip 编辑:程序博客网 时间:2024/05/16 09:31

                                         ------ >Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


   Collections是集合框架的工具类,提到它马上会想到以前学过的Collection,上网查找有关资料,看到了前辈总结的两者区别:

1. java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
 Collection  
├List  
│├LinkedList  
│├ArrayList  
│└Vector  

│ └Stack  
└Set
  2. java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

 工具类collections用于操作集合类,如List,Set,常用方法有:

1.排序 Sort

     使用sort方法可以根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable接口。此列表内的所有元素都必须是使用指定比较器可相互比较的。

2.返回Collections中最大元素 Max

   根据指定比较器产生的顺序,返回给定 collection 的最大元素。collection中的所有元素都必须是通过指定比较器可相互比较的。

3.混排    Collections.shuffli()

    混排算法所做的正好与 sort 相反: 它打乱在一个 List 中可能有的任何排列的踪迹。也就是说,基于随机源的输入重排该List,这样的排列具有相同的可能性(假设随机源是公正的)。这个算法在实现一个碰运气的游戏中是非常有用的。例如,它可被用来混排代表一副牌的Card 对象的一个 List .另外,在生成测试案例时,它也是十分有用的。

4.反转 Reverse

    使用Reverse方法可以根据元素的自然顺序 对指定列表按降序进行排序。

5.替换所有的元素 Fill

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

6.反向排序  Collections.reverseOrder()

    返回一个比较器,强行逆转实现了comparable接口的对象Collection的自然顺序,也可强行逆转指定比较器的顺序

7.同步Collections.synchronizedList()

   让非同步方法变为同步的。


    Arrays是用于操作数组的工具类,里面都是静态方法,其中一个比较重要的方法:asList() 将数组变成List集合:

List<String> list = Arrays.asList(arr);  功能:把数组arr变成集合list,

这样做的好处:可以使用集合的思想和方法来操作数组中元素,但是将数组变成集合,不可以使用集合中的增删方法,因为素组长度固定,如果增删,会发生UnsupportedOperationExcepption。

     将集合变数组,需用Collection接口中的toArray方法
将集合变数组的原因:为了限定对元素的操作,不需要进行增删。有一个问题需要考虑,就是指定类型的数组到底要定义多长?
当指定类型的数组长度length小于集合的长度size,该方法内部会创建一个新的数组,长度为集合的size,当指定类型的数组长度大于集合的长度,就不会创建新数组,而是使用传递进来的数组所以创建一个长度刚好的数组最优。代码如下:

import java.util.*;class  CollectionToArray{public static void main(String[] args) {ArrayList<String> al=new ArrayList<String>(); al.add("acd1"); al.add("acd2"); al.add("acd3");                    String[] arr=al.toArray(new String[al.size()]);  //定义只能存放字符串的数组 System.out.println(Arrays.toString(arr)); //  数组转为字符串方便打印}}


高级for循环,格式:
for(数据类型 变量名:被遍历的集合(Collection)或者数组 )
{
}

特点:对集合进行遍历。只能获取元素,但不能对集合操作。迭代器除了遍历,还可以进行remove集合中元素的动作。如果使用ListIterator,还可以在遍历过程中对集合进行增删改查的动作.
传统for和高级for有什么区别?
高级for有一个局限性,必须有被遍历的目标,建议在遍历数组时候,还是希望用传统for,因为传统for可以定义角标。

import java.util.*;class ForEnceDemo {public static void main(String[] args) {ArrayList<String> al=new ArrayList<String>(); al.add("acd1"); al.add("acd2"); al.add("acd3");for (String s:al ){System.out.println(s);}  int[] arr={2,5,6,7};    //数组中for的使用 for (int i=0;i<arr.length ;i++ )  //传统for { System.out.println(arr[i]); } for (int i:arr )    //高级for { System.out.println("i:"+i); }HashMap<Integer,String> hm = new HashMap<Integer,String>();hm.put(1,"a");hm.put(2,"b");hm.put(3,"c");Set<Integer> keySet=hm.keySet();//HashMap的第一种取出方式for (Integer i:keySet ){System.out.println(i+":"+hm.get(i));}Set<Map.Entry<Integer,String>> entrySet = hm.entrySet();for ( Map.Entry<Integer,String> me: entrySet ){System.out.println(me.getKey()+"----"+me.getValue());}}}

JDK1.5版本出现的新特性:
方法的可变参数,使用时注意:可变参数一定要定义在参数列表的最后面,可变参数,实际上是一种数组参数的简写形式,不用每一次都手动建立数组对象,只要将要操作的元素作为参数传递即可,隐式将这些参数封装成了数组。

class ParaMethodDemo {public static void main(String[] args) {show("xioabai",1,2,3);}public static void show(String str, int...arr){System.out.println(arr.length);}}
StaticImport 静态导入,可以编写代码时更简洁方便,当类名重名时,需要指定具体的包名,当方法重名时,需指定方法所属的对象或者类名。

import java.util.*; //导入util中的所有类import static java.util.Arrays.*;  //导入的是Arrays这个类中的所有静态成员import static java.lang.System.*;  //导入了System类中所有静态成员class StaticImport  {public static void main(String[] args) {int[] arr={8,3,6,5};sort(arr);       //  有了静态导入,书写更简洁,若没有静态导入,应为:Arrays.sort(arr);System.out.println( Arrays.toString(arr));  //System.out.println(Arrays.toString(arr));int index=Arrays.binarySearch(arr,6);out.println("index:"+ index);   //System.out.printin("index:"+ index);}}





0 0
原创粉丝点击