19、集合框架_Collections工具类


一、Collections工具类

Collections和Collection不同,前者是集合的操作类,后者是集合接口 Collections提供的静态方法   addAll():批量添加   sort():排序   binarySearch():二分查找   fill():替换   shuffle():随机排序   reverse():逆序

1、addall()

public class CollectionsDemo {
    public static void main(String[] args) {

        List list = new ArrayList();
        list.add("af");
        list.add("bg");
        list.add("acssf");
        list.add("bdfsdfsd");

        Collections.addAll(list,"cefsdf","cf1","cg32");
        System.out.println(list);

    }

打印结果为:

/*
[af, bg, acssf, bdfsdfsd, cefsdf, cf1, cg32]

Process finished with exit code 0
*/

2、sort()

public class CollectionsDemo {
    public static void main(String[] args) {

        List list = new ArrayList();
        list.add("af");
        list.add("bg");
        list.add("acssf");
        list.add("bdfsdfsd");

        Collections.addAll(list,"cefsdf","cf1","cg32");
        System.out.println(list);

        list.sort(new Comparator() {
            @Override
            public int compare(String o1, String o2) {
                if(o1.length()>o2.length()){
                    return 1;
                }else if(o1.length()<o2.length()){
                    return -1;
                }else{
                    return 0;
                }
            }
        });
        System.out.println(list);
    }
}

打印结果为:

/*
[af, bg, acssf, bdfsdfsd, cefsdf, cf1, cg32]
[af, bg, cf1, cg32, acssf, cefsdf, bdfsdfsd]

Process finished with exit code 0
*/

还可以

public class CollectionsDemo {
    public static void main(String[] args) {

        List list = new ArrayList();
        list.add("af");
        list.add("bg");
        list.add("acssf");
        list.add("bdfsdfsd");

        Collections.addAll(list,"cefsdf","cf1","cg32");
        System.out.println(list);

        list.sort(new Comparator() {
            @Override
            public int compare(String o1, String o2) {
                if(o1.length()>o2.length()){
                    return 1;
                }else if(o1.length()<o2.length()){
                    return -1;
                }else{
                    return 0;
                }
            }
        });
        System.out.println(list);

        Collections.sort(list);
        System.out.println(list);
        Collections.sort(list,new Comparator() {
            @Override
            public int compare(String o1, String o2) {
                if(o1.length()>o2.length()){
                    return 1;
                }else if(o1.length()<o2.length()){
                    return -1;
                }else{
                    return 0;
                }
            }
        });
        System.out.println(list);
    }
}

打印结果为:

/*
[af, bg, acssf, bdfsdfsd, cefsdf, cf1, cg32]
[af, bg, cf1, cg32, acssf, cefsdf, bdfsdfsd]
[acssf, af, bdfsdfsd, bg, cefsdf, cf1, cg32]
[af, bg, cf1, cg32, acssf, cefsdf, bdfsdfsd]

Process finished with exit code 0
*/

3、binarySearch()二分查找

public class CollectionsDemo {
    public static void main(String[] args) {

        List list = new ArrayList();
        list.add("af");
        list.add("bg");
        list.add("acssf");
        list.add("bdfsdfsd");

        Collections.addAll(list,"cefsdf","cf1","cg32");
        System.out.println(list);

        //二分查找的时候需要先进行排序操作,如果没有排序的话,是找不到指定元素的
        Collections.sort(list);
        System.out.println(Collections.binarySearch(list,"acssf"));
    }
}

打印结果为:

/*
[af, bg, acssf, bdfsdfsd, cefsdf, cf1, cg32]
0

Process finished with exit code 0
*/

4、fill()填充对应元素

public class CollectionsDemo {
    public static void main(String[] args) {

        List list = new ArrayList();
        list.add("af");
        list.add("bg");
        list.add("acssf");
        list.add("bdfsdfsd");

        Collections.addAll(list,"cefsdf","cf1","cg32");
        System.out.println(list);

        Collections.fill(list,"mashibing");
        System.out.println(list);
    }
}

打印结果为:

/*
[af, bg, acssf, bdfsdfsd, cefsdf, cf1, cg32]
[mashibing, mashibing, mashibing, mashibing, mashibing, mashibing, mashibing]

Process finished with exit code 0
*/

Arrays工具类

/**
 * Arrays提供了数据操作的工具类,包含很多方法
 *      集合和数组之间的转换
 *          数组转成list:
 *
 *
 */
public class ArraysDemo {
    public static void main(String[] args) {
//        int[] array = new int[]{1,2,3,4,5};
        List ints = Arrays.asList(1,2,3,4,5);

        //list转换成数组
        Object[] objects = ints.toArray();
    }
}

二、面试题

1、集合不数组的比较

? 集合和数组的比较   – 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的一      些缺点,比数组更灵活更实用,可大大提高软件的开发效率,      而且不同的集合框架类可适用不同场合。具体如下:     – 1:数组能存放基本数据类型和对象,而集合类中只能存放对象。     – 2:数组容易固定无法动态改变,集合类容量动态改变。     – 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的         size()可以确切知道元素的个数     – 4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式     – 5:集合以类的形式存在,具有封装、继承、多态等类的特性,         通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率

2、Collection和Collections的区别

– Collection是Java提供的集合接口,存储一组丌唯 一,无序的   对象。它有两个子接口List和Set。 – Java还有一个Collections类,与门用来操作集合类,它提供了 一系列的静态方法实现对各种集合的搜索、排序、线程安全化   等操作

3、ArrayList和LinkedList的联系和区别

– ArrayList实现了长度可变的数组,在内存中分配连续空间。遍   历元素和随机访问元素效率比较高。 – LinkedList采用链表存储方式。插入、删除元素效率比较高

4、Vector和ArrayList的联系和区别

– 实现原理相同,功能相同,都是长度可变的数组结构,很多时   候可以互用 – 两者的主要区别如下   ? Vector是早期的JDK接口,ArrayList是替代Vector的新接口   ? Vector线程安全,ArrayList重速度轻安全,线程非安全   ? 长度需要增长时,Vector默认增长一倍,ArrayList增长50%(1.5+1)

5、HashMap和Hashtable的联系和区别

– 实现原理相同,功能相同,底层都是哈希表结构,查询速度快,   在很多情况下可以互用 – 两者的主要区别如下   ? Hashtable是早期的JDK提供的接口,HashMap是新版的     JDK提供的接口   ? Hashtable继承Dictionary类,HashMap实现Map接口   ? Hashtable是线程安全,HashMap线程非安全   ? Hashtable不允许null值,HashMap允许null值