java学习之集合框架工具类

来源:互联网 发布:网络推广月工作计划 编辑:程序博客网 时间:2024/05/16 10:34

Collections是集合框架的工具类,里面的方法都是静态的

下图中List存放的是String类型,所以sort是根据元素的自然顺序进行排序,即字符串排序,

如果List存放的是自定义类类型,那么需要自定义比较器,作为sort的参数,才能进行排序。

public static void demo1(){List<String> list = new ArrayList<String>();list.add("ghj");list.add("abcd");list.add("cba");list.add("zzz");list.add("klg");System.out.println(list);//对list集合进行指定顺序的排序Collections.sort(list);System.out.println(list);}


二分查找是对有序序列进行的,所以在使用binarySearch之前需要先对list集合里面的元素进行排序。

如果没有找到指定元素,则返回负数,代表插入的位置点减一。如下图中查找"dgs",没有找到,所以

返回负数,“dgs”的插入点在下标为2个位置,所以是-2。再减一就是返回-3。

为什么要减一?

因为如果插入点是0的话没有减一直接返回会引起歧义,不能判断是找到还是没找到。所以要减一,把0变成-1。

private static void demo2() {List<String> list = new ArrayList<String>();list.add("ghj");list.add("abcd");list.add("cba");list.add("zzz");list.add("klg");System.out.println(list);//[ghj, abcd, cba, zzz, klg]//对list集合进行指定顺序的排序Collections.sort(list);//[abcd, cba, ghj, klg, zzz]System.out.println(list);int index = Collections.binarySearch(list, "dgs");System.out.println("index = " + index);//-3  负数表示没有找到,返回插入点减1,即-2-1}


reverseOrder方法返回一个逆转实现了Comparable接口的对象collection的自然顺序的比较器,所以输出时就逆序了。

private static void demo3() {TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());ts.add("abc");ts.add("mer");ts.add("bgh");ts.add("kji");ts.add("zpw");System.out.println(ts);//[zpw, mer, kji, bgh, abc]}

replaceAll方法的实现机制是:先使用集合中的indexOf方法找到"cba"的索引,然后用set方法指定索引,

指定替换的值,就实现了替换功能。

private static void demo4() {List<String> list = new ArrayList<String>();list.add("ghj");list.add("abcd");list.add("cba");list.add("zzz");System.out.println(list);//[ghj, abcd, cba, zzz]Collections.replaceAll(list, "cba", "uio");System.out.println(list);//[ghj, abcd, uio, zzz]}


collections中的静态方法synchronizedList可以返回列表支持的同步(线程安全的)列表。

Arrays:集合框架的工具类。里面的方法都是静态的。
Arrays中的asList方法可以将数组转换成List集合。

public static void demo(){/* * 好处:其实可以使用集合的方法操作数组中的元素。 * 注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的 * 否则会发生UnsupportedOperationException */String[] arr = {"abc", "haha", "lgds"};List<String> list = Arrays.asList(arr);boolean b = list.contains("haha");System.out.println(b);//true}

如果数组中的元素是对象,那么转成集合时,直接将数组中的元素进行集合存储。
如果数组中的元素是基本类型数值,那么会将该数组作为集合中的元素进行存储,所以下图中打印出来的size是1,
说明list集合中只有一个元素。

public static void demo1() {int[] arr = {24, 13, 35, 41};List list = Arrays.asList(arr);System.out.println(list);//[[I@52e922]System.out.println("size = " + list.size());//size = 1}

集合转成数组,使用的就是Colletion接口中的toArray方法。
集合转成数组,可以对集合中的元素操作的方法进行限定,不允许对其进行增删
toArray方法需要传入一个指定类型的数组。
如果长度小于集合的size,那么该方法会创建一个同类型并和集合相同size的数组,如下图第8行。
如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合的元素,其他位置默认为null,如下图第10行。

所以建议最好长度就指定为集合的size,即list.size()

public static void demo1() {List<String> list = new ArrayList<String>();list.add("abc1");list.add("abc2");list.add("abc3");String[] arr1 = list.toArray(new String[2]);System.out.println(Arrays.toString(arr1));//[abc1, abc2, abc3]String[] arr2 = list.toArray(new String[5]);System.out.println(Arrays.toString(arr2));//[abc1, abc2, abc3, null, null]}


0 0
原创粉丝点击