欢迎来到 Kong Xiangqun 的博客

19、集合框架_Collections工具类

一、Collections工具类

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

1、addall()

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

        List<String> list = new ArrayList<String>();
        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<String> list = new ArrayList<String>();
        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<String>() {
            @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<String> list = new ArrayList<String>();
        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<String>() {
            @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<String>() {
            @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<String> list = new ArrayList<String>();
        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<String> list = new ArrayList<String>();
        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<Integer> 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值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2022-04-25 21:30  kongxiangqun20220317  阅读(36)  评论(0编辑  收藏  举报