首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

黑马软件工程师_Collections类的使用之学习笔记

2013-04-12 
黑马程序员_Collections类的使用之学习笔记------- android培训、java培训、期待与您交流! ----------Collec

黑马程序员_Collections类的使用之学习笔记

------- android培训、java培训、期待与您交流! ----------



Collections

作用:专门用来对集合进行操作的类,如对list集合排序sort();

 

sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。

sort(List<T> list,Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。

 

例子

publicclassCollectionsDemo {

 

    /**

     * @paramargs

     */

    publicstaticvoidmain(String[] args) {

       ArrayList<String> al = newArrayList<String>();

      

       al.add("4");

       al.add("111");

       al.add("1");

       al.add("3");

      

 

       Collections.sort(al);

      

       System.out.println(al);

       Collections.sort(al,newMycom2());

 

       System.out.println(al);

    }

 

}

classMycom2implements Comparator<String>

{

    publicintcompare(String o1, String o2) {

       int num= o1.length()-o2.length();

       if(num==0)

       {

           returno1.compareTo(o2);

       }

       return num;

    }

}

输出为:

[1, 111, 3, 4]

[1, 3, 4, 111]

 

 

 

介绍其中几个比较重要的方法

public static<T> Comparator<T> reverseOrder()

 

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

 

如下:

TreeSet<String>ts  = newTreeSet<String>();

       ts.add("2");

      

       ts.add("1");

      

       ts.add("4");

       ts.add("8");

 

       System.out.println(ts);

输出1,2,3,8

 

TreeSet<String>ts  = newTreeSet<String>(Collections.reverseOrder());

       ts.add("2");

      

       ts.add("1");

      

       ts.add("4");

       ts.add("8");

 

       System.out.println(ts);

则输出 8,3,2,1

 

public static<T> Comparator<T> reverseOrder(Comparator<T> cmp)

返回一个比较器,它强行逆转指定比较器的顺序。

例如:

publicclassCollectionnn {

 

    /**

     * @paramargs

     */

    publicstaticvoidmain(String[] args)

    {

 

       TreeSet<String> ts  = newTreeSet<String>(new Mycom());

       ts.add("2");

      

       ts.add("11");

        

       ts.add("422");

       ts.add("8888");

 

       System.out.println(ts);

      

       //得到 [2, 11, 422, 8888]

   TreeSet<String> ts  = newTreeSet<String>(Collections. reverseOrder(new Mycom()));

       ts.add("2");

      

       ts.add("11");

        

       ts.add("422");

       ts.add("8888");

 

       System.out.println(ts);

 

//得到 [ 8888,422,11,2]

 

 

      

    }

 

}

classMycomimplements Comparator<String>

 

{

    publicintcompare(String o1, String o2) {

       // TODOAuto-generated method stub

       returno1.length()-o2.length();

    }

}

 

 

 

下面来讨论集合中线程的不安全问题。

 

就使用这些方法:

static

<T> List<T>

synchronizedList(List<T> list)
返回指定列表支持的同步(线程安全的)列表。

static

<K,V> Map<K,V>

synchronizedMap(Map<K,V> m)
返回由指定映射支持的同步(线程安全的)映射。

static

<T> Set<T>

synchronizedSet(Set<T> s)
返回指定 set 支持的同步(线程安全的)set。

static

<K,V> SortedMap<K,V>

synchronizedSortedMap(SortedMap<K,V> m)
返回指定有序映射支持的同步(线程安全的)有序映射。

static

<T> SortedSet<T>

synchronizedSortedSet(SortedSet<T> s)
返回指定有序 set 支持的同步(线程安全的)有序 set。

 

 

Arrays

用于操作数组的工具类

1.   对基本数据类型的折半查找的方法。

例如

binarySearch(byte[] a, byte key)
使用二分搜索法来搜索指定的 byte 型数组,以获得指定的值。

2.对数组的复制

copyOf(boolean[] original, int newLength)
复制指定的数组,截取或用 false 填充(如有必要),以使副本具有指定的长度。

 

最重要的方法

 

将数组变成List集合

使用Arrays.asList();

String [] arre={"11","23","22"};

      

List<String>list = Arrays.asList(arre);

   

System.out.println(list);

//结果为 [11, 23, 22]

 

为什么将数组变为集合?

 

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

数组是一个对象,但是它的功能比较少。

而集合的方法很多。

 

注意:将数组变成集合,不可以使用集合的增删方法

因为数组的长度是固定的。

如果使用增删,会发生UnsupportedOperationException

 

注意

当使用

int []arr = {1,33,3,4,5};

List list= Arrays.asList(arr);

      

       System.out.println(list);

打印的不是元素,而是这个数组地址值。。

它是将arr作为一个集合的元素存在,而这个集合的类型就是int[]

所以当使用泛型的时候,

List<int []> list= Arrays.asList(arr);

      

应该这样去定义

 

如果数组中的元素都是对象,变成集合时候,数组中的元素就直接转成集合中的元素

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

当我们这样定义时候

Integer []arr ={1,33,3,4,5};

List<Integer>  list= Arrays.asList(arr);

          

           System.out.println(list);

结果为[1,33, 3, 4, 5]

 

上述是数组变成集合使用Arrays中的asList方法。

 

 

当集合变为数组的时候,就用到了

Collection接口中的toArray方法。

 

ArrayList<String>al  = newArrayList<String>();

      

       al.add("1");

       al.add("2");

       al.add("3");

       String [] arr=al.toArray(newString[0]);

 

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

 

输出为 [1, 2, 3]

//这里指定类型的数组要定义多长呢?当指定类型数组小于集合的size,

//那么该方法内部会创建一个新的数组,长度为集合的size

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

//传递进来的数组。

//所以应该这样创建。String [] arr=al.toArray(newString[al.size()]);

为什么要将集合变成数组?

 

是为了限定对元素的操作。当返回一个集合时候,使用者对这个集合依然可以使用增删的方法对集合进行修改。不能改变其集合的大小了

热点排行