集合框架

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合框架 相关的知识,希望对你有一定的参考价值。

1 Collections

1.1 概述

  • 此类完全由在Collection上进行操作或返回Collection的静态方法组成。

 

1.2 Collections的排序

  • 根据元素的自然顺序对指定列表按升序进行排序。
public static <T extends Comparable<? super T>> void sort(List<T> list)
  • 根据指定比较器产生的顺序对指定列表进行排序。
public static <T> void sort(List<T> list,Comparator<? super T> c)

 

  • 示例:
package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abcde");
        list.add("cdb");
        list.add("aaa");
        list.add("zzz");
        list.add("cdb");

        System.out.println("排序前:"+list);

        Collections.sort(list);
        System.out.println("排序后:"+list);




    }


}

技术分享

 

1.3 二分查找法

  • 使用二分查找法搜索指定列表,以获取指定对象
public static <T> int binarySearch(List<? extends Comparable<? super T>> list,
                                   T key)
  • 使用二分查找法搜索指定列表,以获取指定对象
public static <T> int binarySearch(List<? extends T> list,
                                   T key,
                                   Comparator<? super T> c)

 

  • 示例:
package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abcde");
        list.add("cdb");
        list.add("aaa");
        list.add("zzz");
        list.add("cdb");

        Collections.sort(list);

       int index = Collections.binarySearch(list,"aaa");
        System.out.println(index);



    }


}

技术分享

 

1.4 最值

  • 根据元素的自然顺序,返回指定Collection的最大元素。
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
  • 根据指定的比较器产生的顺序,返回指定Collection的最大元素。
public static <T> T max(Collection<? extends T> coll,
                        Comparator<? super T> comp)
  • 根据元素的自然顺序,返回指定Collection的最小元素。
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)
  • 根据指定比较器产生的顺序,返回指定Collection的最大元素。
public static <T> T min(Collection<? extends T> coll,
                        Comparator<? super T> comp)

 

  • 示例:
package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abcde");
        list.add("cdb");
        list.add("aaa");
        list.add("zzz");
        list.add("cdb");

        System.out.println("最大值:"+Collections.max(list));
        System.out.println("最小值:"+Collections.min(list));


    }


}

技术分享

1.5 逆序&替换

  • 返回一个比较器,它强行逆转了Comparable接口的对象Collection的自然顺序。
public static <T> Comparator<T> reverseOrder()
  • 返回一个比较器,它强行逆转了指定比较器的顺序。
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)

 

  • 示例:
package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>();
        set.add("abcde");
        set.add("cdb");
        set.add("aaa");
        set.add("zzz");

        System.out.println(set);



    }


}

技术分享

package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        TreeSet<String> set = new TreeSet<>(Collections.reverseOrder());
        set.add("abcde");
        set.add("cdb");
        set.add("aaa");
        set.add("zzz");

        System.out.println(set);



    }


}

技术分享

 

  • 使用另一个值替换列表中出现的所有某一指定值。
public static <T> boolean replaceAll(List<T> list,
                                     T oldVal,
                                     T newVal)

 

  • 示例:
package java17;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;

/**
 * 2017/10/10
 * 说明:
 */
public class CollectionsDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("abcde");
        list.add("cdb");
        list.add("aaa");
        list.add("zzz");

        Collections.replaceAll(list,"cdb","bdc");
        System.out.println(list);




    }


}

技术分享

1.6 将非线程安全的集合类装换为线程安全的集合类

  • 返回指定Collection支持的同步Collection。
public static <T> Collection<T> synchronizedCollection(Collection<T> c)
  • 返回指定列表支持的同步列表。
public static <T> List<T> synchronizedList(List<T> list)
  • 返回指定映射支持的同步映射。
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
  • 返回指定set支持的同步set。
public static <T> Set<T> synchronizedSet(Set<T> s)
  • 返回指定有序映射支持的同步有序映射。
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m)
  • 返回指定有序Set支持的同步有序Set。
public static <T> SortedSet<T> synchronizedSortedSet(SortedSet<T> s)

 

2 Arrays

2.1 概述

  • 此类包含用来操作数组的各种方法,如排序和搜索等。

 

2.2 一些示例方法

  • 返回指定数组内容的字符串表现形式。
public static String toString(int[] a)

 

  • 示例:
package java17;

import java.util.Arrays;

/**
 * 2017/10/11
 * 说明:
 */
public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = new int[]{1,5,8,3,2};
        System.out.println("调用Arrays方法之前:"+arr);
        System.out.println("调用Arrays方法之后:"+Arrays.toString(arr));
    }
}

技术分享

 

  • 返回一个受指定数组支持的国定大小的列表。
public static <T> List<T> asList(T... a)

 

  • 示例:
package java17;

import java.util.Arrays;
import java.util.List;

/**
 * 2017/10/11
 * 说明:
 */
public class ArraysDemo {
    public static void main(String[] args) {
        String[] arr = new String[]{"abc","cdg","efg","sfg"};
        List<String> list = Arrays.asList(arr);
        System.out.println(list.contains("sfg"));

    }
}

技术分享

  • 从上面的示例中,我们可以看出将数组转为集合,有这样的好处:就是可以使用集合的方法操作数据的元素。

 

  • 示例:
package java17;

import javax.net.ssl.SSLContext;
import java.util.Arrays;
import java.util.List;

/**
 * 2017/10/11
 * 说明:
 */
public class ArraysDemo {
    public static void main(String[] args) {
        String[] arr = new String[]{"abc","cdg","efg","sfg"};
        List<String> list = Arrays.asList(arr);
        list.add("aa");
        System.out.println("list:"+list);

    }
}

技术分享

 

  • 从上面的示例中,我们知道对于数组转换过来的集合是不可以进行增删功能的(UnSupportedOperationException异常),因为数组的长度是固定的。

 

  • 注意:在数组转集合过程中,①如果数组中的元素是对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行存储。②如果数组中的元素是基本数据类型,那么会将该数组作为集合中的元素进行存储。
package java17;

import javax.net.ssl.SSLContext;
import java.util.Arrays;
import java.util.List;

/**
 * 2017/10/11
 * 说明:
 */
public class ArraysDemo {
    public static void main(String[] args) {
        int[] arr = new int[]{1,3,4,5};
        List<int[]> list = Arrays.asList(arr);
        System.out.println("list:"+list.toString());

    }
}

技术分享

 

以上是关于集合框架 的主要内容,如果未能解决你的问题,请参考以下文章

text 来自Codyhouse框架的Browserlist片段源代码

金蝶handler中 collection 代码片段理解

Alfred常见使用

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段

比较 C# 中的字符串片段并从集合中删除项目

带有红宝石集合/可枚举的酷技巧和富有表现力的片段[关闭]