java集合类

Java知识总结


3.java集合类

Collection

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。

直接上集合类的类图更加直观:

大家从图中可以直接明了的发现各子类集合之间的关系。

现在为大家大致的介绍一下个子类的特征:

下面给大家详细介绍一下:

  1. Collection:父接口;
    • Set:接口 ---实现类: HashSet、LinkedHashSet
    • List:接口---实现类: LinkedList,Vector,ArrayList
    • SortedSet:接口---实现类:TreeSet
    • Map接口---实现类:HashMap、Hashtable、LinkedHashMap、Properties

List:

List:有序列表,允许存放重复的元素;

实现类:

------ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;

------LinkedList:链表实现,增删快,查询慢

------Vector:数组实现,线程安全,重量级

levit应用中使用集合分布表:

集合类型 ------>应用数量

ArrayList---------184处

LinkedList---------2处

Vector-------------0处

分析:

从以上的分析结果来看ArrayList是用的最多的,Vector没有用到(有性能问题,不建议使用)

下面分析一下LinkLst的引用场景

private List<Long> getGroupIds(List<GroupMemberDO> groupMemberDOs) {

    List<Long> groupIds = new LinkedList<Long>();
    if (CollectionUtils.isEmpty(groupMemberDOs)) {
        return groupIds;
    }

    // 后台任务调用该方法,此场景数据量很大,外面循环的集合类型是ArrayList(查询快),对查询出的数据保存应用LinkedList(增加快)。
    for (GroupMemberDO groupMemberDO : groupMemberDOs) {

        // 此处只做增加操作,上面分析LinkedList是基于链表它做增加删除很快。
        groupIds.add(groupMemberDO.getGroupId());
    }
    return DistinctElementFilter.filterList(groupIds);
}

这个例子告诉我们什么?

这样的场景在大家对数据库操作的时候经常会出现,当我们从数据库中查询出某个集合的时候,这个时候可能是model,但是前台需要我们转为想要的VO,这个时候我们就可以采取这样的方式来提高程序的效率。

Set:

Set:无序集合,不允许存放重复的元素;允许使用null元素

HashSet 的后台有一个HashMap;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问; 如果有两个Key重复,那么会覆盖之前的

实现类 HashSet:equals返回true,hashCode返回相同的整数;哈希表;存储的数据是无序的。 实现类 LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的

------子接口SortedSet:对Set排序实现类 :TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序;当我们想对set排序的时候就可以使用这样的方法。

Map:

HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;

Hashtable:线程安全的,不允许null的键或值;

Properties: key和value都是String类型,用来读配置文件;

TreeMap: 对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;

LinkedHashMap: 此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

levit应用中使用集合分布表:

集合类型 ------应用数量

HashMap--------- 142处

Hashtable ---------- 0

Properties ---------- 0

TreeMap -------------0

LinkedHashMap ---- 3

分析:

从以上的分析结果来看与List的分析结果大致相同,HashMap应用场景最多。

最后给大家分享一个求集合的交集、并集、补集和差集的方法,希望对大家有所帮助。

public class CollectionUtilsIntro {
    public static void main(String[] args) {
        String[] arrayA = new String[] { "1", "2", "3", "3", "4", "5" };
        String[] arrayB = new String[] { "3", "4", "4", "5", "6", "7" };
        List<String> a = Arrays.asList(arrayA);
        List<String> b = Arrays.asList(arrayB);
        // 并集
        Collection<String> union = CollectionUtils.union(a, b);
        // 交集
        Collection<String> intersection = CollectionUtils.intersection(a, b);
        // 交集的补集
        Collection<String> disjunction = CollectionUtils.disjunction(a, b);
        // 集合相减
        Collection<String> subtract = CollectionUtils.subtract(a, b);
        Collections.sort((List<String>) union);
        Collections.sort((List<String>) intersection);
        Collections.sort((List<String>) disjunction);
        Collections.sort((List<String>) subtract);
        System.out.println("A: " + ArrayUtils.toString(a.toArray()));
        System.out.println("B: " + ArrayUtils.toString(b.toArray()));
        System.out.println("--------------------------------------------");
        System.out.println("并集(A, B): "
                + ArrayUtils.toString(union.toArray()));
        System.out.println("交集(A, B): "
                + ArrayUtils.toString(intersection.toArray()));
        System.out.println("交集的补集(A, B): "
                + ArrayUtils.toString(disjunction.toArray()));
        System.out.println("集合相减(A, B): "
                + ArrayUtils.toString(subtract.toArray()));
    }
}

当然,这里需要引入apache的一个工具包,commons-collections4-4.0.jar

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值