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

 

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ------

 

       Collections

一、概述

        Collections是对集合框架的一个工具类。它里边的方法都是静态的,不需要创建对象。并未封装特有数据。

       在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替换集合中的oldVal值

        void swap(Listlist,int i,int j);/在指定列表的指定位置处交换元素

3排序:

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

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

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

4、反转

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

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

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

 

package atheima;
import java.util.*;

public class CollectionsDemo1 
{
    
  public static void main(String[] args)
   {
      orderDemo();
   }
  public static void orderDemo()
  {
    //Collections.reverseOrder()可以强行逆转集合的长度
      TreeSet<String>list=new TreeSet<String>(Collections.reverseOrder(new StrlComparator()));//比较长度
      list.add("nn");
      list.add("nz");
      list.add("nnffd");
      list.add("sdgnn");
      list.add("avbnn");
      sop(list);//强行逆转集合的长度[sdgnn, nz, nnffd, nn, avbnn]---》长度逆转:[sdgnn, nnffd, avbnn, nz, nn]
  }
  public static void sop(Object obj)
  {
      System.out.println(obj);
  }
}
//比较长度
class StrlComparator implements Comparator<String>
{
    @Override
    public int compare(String o1, String o2) {
        if(o1.length()>o2.length())
            return 1;
        if(o1.length()<o2.length())
            return -1;
        return o1.compareTo(o2);
    }
    
}

5、同步的集合

        List<T>synchronizedList(List<T> list);//返回支持的同步(线程安全的)List集合

        Map<K,V>synchronizedList(Map<K,V> m);//返回支持的同步(线程安全的)Map集合

 

package atheima;
import java.util.*;

public class CollectionsDemo 
{
    
  public static void main(String[] args)
   {
      //sortDemo();
      //maxDemo();
     // binarySearchDemo();
      fillDemo();
   }
  public static void fillDemo()
  {
      List<String>list=new ArrayList<String>();
      list.add("nn");
      list.add("nz");
      list.add("nnffd");
      list.add("sdgnn");
      list.add("avbnn");
      sop(list);
      Collections.fill(list, "nz");
      sop(list);//[nz, nz, nz, nz, nz]
    }
  //二分法查找
  public static void binarySearchDemo()
  {
      List<String>list=new ArrayList<String>();
      list.add("nn");
      list.add("nz");
      list.add("nnffd");
      list.add("sdgnn");
      list.add("avbnn");
      Collections.sort(list);//自然排序
      sop(list);
      int index=Collections.binarySearch(list,"nz");
      sop("index="+index);//index=3
  }
  //取最大元素
  public static void maxDemo()
  {
      List<String>list=new ArrayList<String>();
      list.add("nn");
      list.add("nz");
      list.add("nnffd");
      list.add("sdgnn");
      list.add("avbnn");
      sop(list);
      Collections.sort(list);//自然排序
      sop(list);
      String max=Collections.max(list);//取最大元素
      sop("max="+max);
  }
  public static void sortDemo()
  {
      List<String>list=new ArrayList<String>();
      list.add("nn");
      list.add("nz");
      list.add("nnffd");
      list.add("sdgnn");
      list.add("avbnn");
      sop(list);
      //Collections.sort(list);//升序排序
      Collections.sort(list,new StrComparator());//升序排序
      sop(list);//[avbnn, nn, nnffd, sdgnn]
  }
  public static void sop(Object obj)
  {
      System.out.println(obj);
  }
}
class StrComparator implements Comparator<String>
{
    @Override
    public int compare(String o1, String o2) {
        if(o1.length()>o2.length())
            return 1;
        if(o1.length()<o2.length())
            return -1;
        return o1.compareTo(o2);
    }
    
}


三、Collections和Collection的区别

        Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。

       它有两个常用的子接口:

                List:对元素都有定义索引。有序的。可以重复元素。       

                Set:不可以重复元素。无序

        Collections是集合框架中的一个工具类。该类中的方法都是静态的。提供的方法中有可以对list集合进行排序,二分查找等方法

通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

 

      Arrays

一、概述

Arrays是用于操作数组的工具类。里边的方法也全是静态的。不需要创建对象。

       把数组变成List集合的好处:可以使用集合的思想和方法来操作数组中的元素。如:contains,get,indexOf,subList等方法。

 

二、常见方法

1、Lsit<T> asList(T... a);//将数组转换为集合

注意:

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

        b、如果数组中的元素都是对象,则变成集合时,数组中的元素就直接转为集合中的元素。

        c、如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

2、binarySearch():二分查找方法,fill():替换方法,sort():排序方法等

       特点:可对数组元素进行相应操作,可以接受除boolean之外的其他各种基本数据类型及有序的引用类型数组的参数,且还可以对指定元素的范围,并可根据指定比较器进行相应的操作。

       如:sort(T[]a,Comparator<? super T> c)

                fill(int[]a,int from,int to)等

3、String toString();//可以接收各种数组类型参数,并返回指定数组内容的字符串表现形式。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。