Java中的两个常用工具类及集合数组的相互转换

为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类:

一、Collections

1Collections类的特点:

集合框架的工具类。里面定义的都是静态方法。

2CollectionsCollection有什么区别?

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

              它有两个常用的子接口,

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

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

 

Collections是集合框架中的一个工具类。该类中的方法都是静态的

              提供的方法中有可以对list集合进行排序,二分查找等方法。

              通常常用的集合都是线程不安全的。因为要提高效率。

              如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

3Collections的常用方法

1)排序

2)取最大最小值

3)二分查找

4)替换

使用指定元素替换指定列表中的所有元素

5)反转

6)线程同步

4、对这些方法的演示如下:

import java.util.*;

class  CollectionsDemo

{

       public static void main(String[] args)

       {

              sortDemo();

 

       }

 

 

 

       public static void binarySearchDemo()

       {

              List list = new ArrayList();

 

              list.add("abcd");

              list.add("aaa");

              list.add("zz");

              list.add("kkkkk");

              list.add("qq");

              list.add("z");

              Collections.sort(list,new StrLenComparator());

 

              sop(list);

 

              int index = Collections.binarySearch(list,"aaaa");

             

              sop("index="+index);

       }

 

             

 

       public static void maxDemo()

       {

              List list = new ArrayList();

 

              list.add("abcd");

              list.add("aaa");

              list.add("zz");

              list.add("kkkkk");

              list.add("qq");

              list.add("z");

              Collections.sort(list);

              sop(list);

              String max = Collections.max(list/*,new StrLenComparator()*/);

              sop("max="+max);

       }

 

       public static void sortDemo()

       {

              List list = new ArrayList();

 

              list.add("abcd");

              list.add("aaa");

              list.add("zz");

              list.add("kkkkk");

              list.add("qq");

              list.add("z");

             

              sop(list);

 

              Collections.sort(list);

              //Collections.sort(list,new StrLenComparator());

              //Collections.swap(list,1,2);

              sop(list);

             

       }

 

public static void replaceAllDemo()

       {

 

 

              List list = new ArrayList();

 

              list.add("abcd");

              list.add("aaa");

              list.add("zz");

              list.add("kkkkk");

 

              sop(list);

 

              Collections.replaceAll(list,"aaa","pp");

 

              sop(list);

              Collections.reverse(list);

 

              sop(list);

       }

 

       public static void sop(Object obj)

       {

              System.out.println(obj);

       }

}

 

 

class StrLenComparator implements Comparator

{

       public int compare(String s1,String s2)

       {

              if(s1.length()>s2.length())

                     return 1;

              if(s1.length()

                     return -1;

              return s1.compareTo(s2);

       }

}

 

二、Arrays

1、特点:

用于操作数组的工具类。里面都是静态方法。

2Arrays类的一个非常重要的方法

public static ListasList(T... a)

该方法将返回一个受指定数组支持的固定大小的列表

3、把数组变成list集合有什么好处?

       可以使用集合的思想和方法来操作数组中的元素。

 

注意:

1)  将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定。如果你增删。那么会反生UnsupportedOperationException

2)  如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素;    如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

4、示例代码如下:

 

import java.util.*;

class  ArraysDemo

{

       public static void main(String[] args)

       {

              int[] arr = {2,4,5};

 

              System.out.println(Arrays.toString(arr));

 

              String[] arr = {"abc","cc","kkkk"};            

              List list = Arrays.asList(arr);

             

              //list.add("qq");//UnsupportedOperationException,

 

              sop(list);

 

              //int[] nums = {2,4,5};

              Integer[] nums = {2,4,5};

              sop(li);

 

 

 

       }

       public static boolean myContains(String[] arr,String key)

       {

              for(int x=0;x

              {

                     if(arr[x].equals(key))

                            return true;

              }

              return false;

       }

      

       public static void sop(Object obj)

       {

              System.out.println(obj);

       }

 

}

三、集合变数组

1、实现的方法

使用Collection接口中的toArray()方法。

2、指定类型的数组到底要定义多长呢?

当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组。长度为集合的size

       当指定类型的数组长度大于了集合的size,就不会新创建了数组。而是使用传递进来的数组。

       所以创建一个刚刚好的数组最优。

3、为什么要将集合变数组?

       为了限定对元素的操作。不需要进行增删了。

4、示例代码如下:

import java.util.*;

class  CollectionToArray

{

       public static void main(String[] args)

       {

              ArrayList al = new ArrayList();

 

              al.add("abc1");

              al.add("abc2");

              al.add("abc3");

             

             

 

              String[] arr = al.toArray(new String[al.size()]);

 

              System.out.println(Arrays.toString(arr));

 

 

 

       }

}

 

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