黑马 程序员——Java基础---集合框架工具类

黑马程序员——Java基础---集合框架工具类  

 

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

 

一、概述

  Java为操作Set、List和Map提供了一系列工具类,主要有Collections和Arrays。这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可。Collections:是集合对象的工具类,提供了操作集合的工具方法;Arrays:是数组的工具类,提供了对数组的工具方法。
    当把数组转换成集合后,可以用集合的方法来操作集合,但是某些改变集合长度发方法不可以用,因为数组是固定长度的。
    当数组中的元素是引用数据类型时,变成集合后,就将数组中的元素作为集合中的元素存在。
    当数组中的元素是基本数据类型时,变成集合后,会将这个数组变成集合中的元素。

 

一、正文

1Collections工具类

  在Collections工具类中很多方法是用于对List集合进行操作的,如比较,查找,随机排序等,下面是常用的方法:

1.查找:



      T max(Collection<? extends T> coll)     根据集合的自然顺序,获取coll集合中的最大元素



       T max(Collection<? extends T> coll,Comparator<? super T> comp)    根据指定比较器comp的顺序,获取coll集合中的最大元素



      Int binarySearch(Lsit<? extends Comparable<? super T>> list,Tkey)   二分法搜索list集合中的指定对象



2.替换:



      void fill(List<? super T> list, T obj)    将list集合中的全部元素替换成指定对象obj



 boolean replaceAll(List<T> lsit,T oldVal,T newVal)     使用newVal替换list集合中的oldVal值



3.反转



 reverse(List<?> list)    反转list集合中元素的顺序



     Comparator reverseOrder()   返回一个比较器,强行逆转了实现Comparable接口的对象的自然顺序



     Comparator reverseOrder(Comparator<T> cmp)   返回一个比较器,强行逆转了指定比较器的顺序



4.排序:



     void shuffle(List<?> list)    使用默认随机源对list集合中的元素进行随机排序



     void sort(Lsit<T> list)    根据自然顺序对list集合中的元素进行排序



      void sort(List<T> lsit,Comparator<? super T> c)    根据指定比较器c的排序方式对list集合进行排序

  下面是一段练习代码:

public class User { //此处无需实现Comparable接口



    private String name;

    private Integer order;

    public String getName() {

        return name;

    }




public void setName(String name) { this.name = name; }
public Integer getOrder() { return order; }
public void setOrder(Integer order) { this.order = order; } } 主类中这样写即可: public class Test{ public static void main(String[] args) { User user1 = new User(); user1.setName("a"); user1.setOrder(1); User user2 = new User(); user2.setName("b"); user2.setOrder(2); List<User> list = new ArrayList<User>(); list.add(user2); list.add(user1);
Collections.sort(list,
new Comparator<User>(){ public int compare(User arg0, User arg1) { return arg0.getOrder().compareTo(arg1.getOrder()); } });    for(User u : list){   System.out.println(u.getName()); } } }

  上面程序演示了如何用Collections的Sort对List的排序方法。

 

2Arrays工具类

      java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:

1.给数组赋值:通过fill方法。

2.对数组排序:通过sort方法,按升序。

3.比较数组:通过equals方法比较数组中元素值是否相等。

4.查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

下面是常用方法的具体应用代码:

public class TestArrays {

 
   

       public static void output(int[] array) {

              if (array!=null) {

              for (int i = 0; i < array.length; i++) {

                     System.out.print(array[i]+" ");

              }

}

             System.out.println();

}

 
   

       public static void main(String[] args) {

              int[] array = new int[5];

              //填充数组

              Arrays.fill(array, 5);

              System.out.println("填充数组:Arrays.fill(array, 5):");

              TestArrays.output(array);     

 

              //将数组的第2和第3个元素赋值为8

              Arrays.fill(array, 2, 4, 8);

            System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");

              TestArrays.output(array);

              int[] array1 = {7,8,3,2,12,6,3,5,4};

 
   

              //对数组的第2个到第6个进行排序进行排序

              Arrays.sort(array1,2,7);

              System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");

              TestArrays.output(array1);

 
   

              //对整个数组进行排序

              Arrays.sort(array1);

              System.out.println("对整个数组进行排序:Arrays.sort(array1):");

              TestArrays.output(array1);

 
   

              //比较数组元素是否相等

              System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));

              int[] array2 = array1.clone();

              System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));

 
   

              //使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)

              Arrays.sort(array1);

              System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));

             //如果不存在就返回负数

             System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));

}

}

  注意:将数组转换成集合,不可使用集合的增删方法,因为数组的长度是固定的,如果进行增删操作,则会产生UnsupportedOperationException的编译异常。

 

3jdk1.5新特性

  Collection有一个父接口Iterable,该接口封装了iterator方法,并提供了一个增强型的for循环,具体格式如下:

for(元素类型 变量 :数组或者Collection集合)

{

}

  增强for循环和传统for循环区别:增强for循环,使用时,必须要有被遍历的目标,而且只能遍历数组和Collection集合,简化了迭代;传统for循环,使用更加普遍。

  注意:遍历数组还是使用传统for循环,这样可以通过指针对数组中的元素进行操作

  可变参数是指定数据类型的后面加上三个点,其实就是一个数组类型的参数,以前定义一个int[]类型 参数,调用必须要定义好一个数组,再往里传递。而现在定义一个int…类型的参数,调用者,直接往该函数里传递元素即可,在运行时,自动会将这些实际参数封装到一个该类型的数组中。

  注意:如果函数上有多个参数,可变参数一定要定义在参数列表最后边,否则编译失败

 

三、总结

  本文介绍了集合框架的两个工具类,以及jdk1.5的两个新特性。简单的讲述了Collections和Arrays基本的使用方法,其中Collections写了一个简单的用sort排序的实例。

你可能感兴趣的:(java基础)