黑马程序员_学习日记八_集合三

来源:互联网 发布:知乎lol与dota2 编辑:程序博客网 时间:2024/04/29 12:25

---------------------- android培训java培训、期待与您交流! ----------------------

 

集合框架工具类-sort

    Collections(集合框架工具类),这个类是专门用于对集合进行操作的工具类,该类不能实例化对象,它提供了很多方法来对集合进行必要的操作,而且这些方法都是static静态的。

    其中有一个就是static <T extends Comparable<? super T>> voidsort(List<T> list)方法,这个方法可以对指定的List集合进行排序,它还有另外一个重载的方法,那就是:static <T> void sort(List<T> list, Comparator<? SuperT> c)。这个方法需要传入一个Comparator的对象作为参数,来对指定的List进行自定义排序。

集合框架工具类-max

    static <T extends Object & Comparable<? super T>>T max(Collection<? extends T c>)这个方法是根据集合内对象的自然顺序,返回指定集合的最大元素。集合中的所有对象必须实现Comparable接口,而且集合中的所有对象都必须是相互可比较的。

    max()也有重载方法,那就是:

    static <T> T max(Collection<? extends T> c,Comparator<? Super T>  comp),这个重载的方法也是需要传入一个Comparator的对象作为参数,来获得指定集合中的最大元素。

集合框架工具类-binarySearch

    static <T> int binarySearch(List<? Extends Comparator<?super T>> list, T key),该方法使用二分查找法根据查询指定列集合的指定对象的索引,返回值为该对象在集合中的索引。查找的前提是集合是有序的。

      同理这个方法也有重载形式static <T> int binarySearch(List<? extends T>list, T key, Comparator<? super T> c)。

 集合框架工具类-替换反转

    替换:

    static <T> void fill(List<? super T> list, T obj),用指定对象替换指定集合中的所有对象。

    static <T> boolean replaceAll(List<T> list, T oldVal,T newVal),用指定的对象替换指定集合中的所有指定的原对象。

    反转:

    static void reverse(List<T> list),反转指定集合中的对象。

 集合框架工具类-reverseOrder

    static <T> Comparator<T> reverseOrder(),该方法强行逆转实现了Comparable接口的集合的自然顺序,返回值是一个Comparator比较器。

    该方法也有一个重载方法:

    static <T> Comparator<T>reverseOrder(Comparator<T> cmp),该方法参数为一个比较器对象,强行逆转该比较器对象的顺序,返回值也是一个Comparator比较器。

集合框架工具类-synList

    集合接口当中有很多方法都是线程不同步的,所以如果在多线程应用中就可能会出现安全问题,所以在集合框架工具类中提供了一些方法可以将指定的那些线程不同步集合转换成为线程同步的集合。

    static <T> List <T> synchronizedList(List<T>list),将指定的List集合变成线程同步的集合再返回。

    Set和Map集合也有相应的方法。

Arrays

    Arrays也是一个集合框架工具类,该工具类用于操作数组。它所提供的方法也都是static的。

    该工具类中有个比较特殊的方法需要注意,那就是:

    static <T> List<T> asList(T… a),该方法的功能是将指定数组转换成固定大小的集合。把数组转换成集合的好处可以使用集合的思想和使用集合的部分方法来操作数组中的元素。

    注意:将数组转换成集合不可以使用集合的增删方法,因为数组的长度是固定的,无法添加,删除元素。否则会抛出UnsupportedOperationException。

集合转换成数组

    将集合转换成数组方法就是之前在Collection这个接口中的Object[] toArray()方法,它也有重载形式:<T> T[] toArray(T[] a),它返回的数组与方法参数指定的数组类型相同。当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组长度为集合的size,当指定类型数组的长度大于集合的size,就不会创建新的数组,而是使用传递进来的数组。所以创建一个长度刚刚好的数组最优:toArray(T[集合名称.size()])。

    为什么要将集合转换成数组呢?其实有时候是为了限定对元素的操作,不需要对集合进行增加和删除的操作的时候就可以将集合转换成数组。

增强for循环

    在JDK1.5版本中,Collection这个接口继承了Iterable接口,在这个接口中只有一个iterator()方法,其实这个接口就是单独将这个方法抽取出来了,以后如果产生了新的集合类,只要事先这个接口,就可以调用iterator()遍历集合中的元素。

    除此之外,Iterable这个接口还增强了for语句的功能,就是高级for循环:高级for循环的出现其实也是为了使遍历集合的语句更加简洁。

    格式:  for(数据类型 变量名:被遍历的集合(Collection对象)或者数组名),比如:

    ArrayList<String> arrayList = newArrayList<String>();

    arrayList.add(“abc”);

    arrayList.add(“def”);

    arrayList.add(“ghi”);

 

    for(String str: al)

    {

        System.out.println(str);

    }

    总结:Collcetion中几种遍历方式的比较。

1.高级for语句对集合进行遍历,只能获取元素,而不能对元素进行操作。

2.迭代器Iterator除了遍历,还能调用remove()方法移除集合中的对象。

3. ListIterator这个接口在遍历过程中还可以进行增删改查的动作。

 

    传统for循环语句和高级for循环语句的区别:

    高级for循环必须有被遍历的目标。所以在遍历数组的时候,最好还是使用传统for循环语句,这样可以定义角标,使用起来更加灵活。高级for循环在遍历集合的时候往往使用的更多。

可变参数

    JDK1.5版本中的新特性:可变参数

    如果再某一个方法当中的参数为数据同类型的数组并且个数不确定,可以进行如下的方法定义:

    public void method(int… arr){}

    其中arr数组就是一个长度不确定的数组。

    调用该方法的格式:method(2, 3, 4, 5);

    这样不用每一次都手动的建立数组对象,只要将要操作的数据作为参数传递到该方法中即可,虚拟机隐式的将这些数据封装成了数组。

    可变参数在使用时一定要定义在参数列表的最后。

静态导入

    JDK1.5版本中的新特性:静态导入

    在导入包的时候可以这样:import static 包名.类名.*;这样就把这个包中所有的静态成员全部导入进来,在调用这些静态方法的时候,就可以不用再在方法前面加上类名了。

    但是有个地方要注意,当导入进来的方法名称有重复的情况,就必须指定要调用方法所属的对象或者类名。

 

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

原创粉丝点击