码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-27 22:00:16      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------ 

 

一、概述

  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基础---集合框架工具类

标签:

原文地址:http://www.cnblogs.com/hutanlong/p/4372608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!