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

黑马程序员——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排序的实例。

时间: 2024-07-30 13:52:22

黑马程序员——Java基础---集合框架工具类的相关文章

黑马程序员---java基础---集合框架工具类:Collections和Arrays

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------        Collections 一.概述 Collections是对集合框架的一个工具类.它里边的方法都是静态的,不需要创建对象.并未封装特有数据. 在Collections工具类中大部分方法是用于对List集合进行操作的,如比较,二

黑马程序员——java基础---集合框架

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.集合框架 概念:集合框架是Java中为了方便对集合进行存储.操作而形成的体系.集合是针对对象最常见的一种存储形式. 数组和集合类同是容器,区别在哪里?     相同点:               集合和数组都是容器,都可一存储对象(对象引用).     不同点:               数组长度固定,集合长度可变.               数组可以存储基本数据类型,集合却只能存储

黑马程序员-Java基础-集合框架-TreeSet、二叉树、泛型

第一讲 TreeSet 1.  概述 TreeSet可以对Set集合中的元素进行排序,按照自然顺序排. 2.  演示代码 输出结果: 总结:TreeSet会对元素进行自然排序,大写排在小写前面. 第二讲  TreeSet存储自定义对象 1. 概述: 将自定义对象存储到TreeSet集合中. 2. 思路: 自定义学生类,并将学生对象存储到TreeSet中,在存储过程中按照年龄排序. 3. 练习:往TreeSet集合中存储自定义对象(学生),并按照学生年龄进行排序 小结: 自定义对象需要重写Comp

黑马程序员-java基础-集合框架-Collection、List、Set

第一讲:体系概述 一.概述 1.  作用:用于存放对象的容器 2.  特点:只用于存储对象,集合长度可变,集合可以存储不同类型的对象: 3.  与数组的区别:虽然数据也可以存储对象,但数组的长度是固定的,而集合长度是可变的,集合类的出现可以解决现实生活中数量不确定的问题: 4.  常用的集合类及结构 第二讲:共性方法 集合实现了Collection接口,Collection接口声明了如下常用方法: 1)  向集合中添加元素:add(Object obj).addAll() add()方法用于向集

黑马程序员-Java基础---集合框架-Map

第一讲 Map概述&子类对象特点&共性方法 1.  定义 Map集合:该集合存储键值对,一对一对的往里存,而且要保证键是唯一的.若存了重复的键,那么对应此键的值将被后一个覆盖. 2.  Map子类对象特点 Map集合有如下三个子类: l  Hashtable:底层是哈希表数据结构,不可存入null键或null值.线程同步,JDK1.0就有,效率稍低. l  HashMap:底层是哈希表数据结构,可以存入null键或null值.线程同步,JDK1.2出现,效率较高. l  TreeMap:底

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

黑马程序员——JAVA基础——集合

----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 一.关于java中的集合类 首先看一下,大致的框架流程图 通过这些我们可以看出来,通常我们经常采用的vector.arraylist.hashset,treeset,hashmap,hashtable,treemap.linkedlist类 关于vector和arraylist对比,vector是线程安全的,vector通过遍历,性能更高. ArrayList和Vector功能类

黑马程序员——Java基础---集合(一)---Collection、set、list

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------        集合框架 java中有许多的集合,也称为容器,下图便是集合框架的构成及分类. 一.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式.

黑马程序员------java基础----集合

  ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! -------  集合框架 为什么会出现这么多容器? 因为每一个容器对数据的存储方式都有不同,这个存储方式称之为:数据结构. 一.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存