Java 集合框架

作者: Daybreaks | 来源:发表于2020-05-05 16:44 被阅读0次

    Java 集合框架

    ps:写这篇文章主要为了整理一下Java 的类集合框架,如有错误或不全,欢迎纠正

    converse

    Java集合框架图

    图片摘自网络

    java 集合框架继承图

    补充一下上图:

    1. 继承自Iterator的是ListIterator而不是LinkIterator
    2. 加一个Deque接口继承自Queue


      在这里插入图片描述

    集合框架分析

    整个Java集合框架其实被分为两部分,Collection和Map,但我们一般也称Map是Collection。从集合框架图我们可以看到,Map指出一个箭头produce指向Collection,这是因为Map的key,value,entry都是Set,而Set是继承自Collection。所以我们一般也说Map是Collection,Colleciton是java集合框架的顶层类。

    1.Interator 迭代器

    迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。源自百度百科

    迭代器顾名思义,用来迭代集合,Colleciton是Java集合框架的顶层接口,而Collection实现了iterator,也就意味着所有继承自Colleciton的子类也就具有了迭代的能力。

    public interface Iterable<T> {
        
        Iterator<T> iterator();
        //还有两个default接口
        ...
        ...
    }
    

    这个接口定义了一个iterator方法,每一个Collection必须返回自己实现的迭代器。
    我们看一下迭代器的实现:

    public interface Iterator<E> {
       
        boolean hasNext();
    
        E next();
    
        default void remove() {
            throw new UnsupportedOperationException("remove");
        }
    
        default void forEachRemaining(Consumer<? super E> action) {
            Objects.requireNonNull(action);
            while (hasNext())
                action.accept(next());
        }
    }
    

    主要的两个方法:next、hasNext。根据每一个集合的特性方法的内部实现有所不同,但提供给外部的功能都一样,分别是判断迭代的下一个位置是否有元素、返回当前元素然后迭代的当前位置+1,以ArrayList为例:

            ArrayList<String> arrayList = new ArrayList<>();
            //Iterator接口中定义的方法,这个额迭代器的具体实现在ArrayList中以内部类的形式存在
            Iterator<String> iterator = arrayList.iterator();
    
            while (iterator.hasNext()) {
                String temp = iterator.next();
                System.out.println(temp);
            }
    
    2.集合工具类
    • Arrays
    • Collections

    类中有很多静态方法,用来操作数组和集合,很多方法很实用,比如

    • Arrays.toSort(List list); 对集合排序
    • Arrays.toString(array);格式化打印数组
    • List<String syncList = Collections.synchronizedList(mList); 将一个List转换成线程安全的List。
    • ......
    3.List

    特性:

    • 有序集合
    • 元素允许重复,并且允许为null
    • 可以通过索引得到指定位置元素

    常用的有如ArrayList、LinkedList都直接或间接实现了List。

    4.Set

    特性:

    • 无法通过索引获取元素
    • 元素不允许重复,通过集合存储元素的equals方法来判断重复。
    • 无法保证Set中元素迭代顺序和存储顺序相同
    • 常用集合如HashSet、TreeSet
    • HashSet:基于哈希值散列存储,性能高,添加和删除操作的时间复杂度恒定,无序
    • TreeSet:通过存储元素实现的Comparable接口来对TreeSet中的元素进行排序,遍历TreeSet时按排序后的顺序输出。
    4.Queue、Deque

    Queue代表着单向队列,先进先出,从队尾入队,队头出队,两个操作对应接口中的两个方法:

    public interface Queue<E> extends Collection<E> {
      
    
        //插入队尾
        boolean offer(E e)
        //得到队头元素并移除
        E poll();
        //得到对头元素不移除
        E peek();
    }
    

    Deque代表双向队列:扩展了Queue。可以通过Deque实现Stack:后进先出,队尾入队,队尾出队,对应的两个方法:

    public interface Deque<E> extends Queue<E> {
        //push 元素 入栈
        void push(E e);
    
        //pop  元素 出栈
        E pop();
    
    
    
    Map

    是一种从Key到Value的映射的数据结构:

            HashMap<Integer, String> hashMap = new HashMap<>();
            hashMap.put(1,"数字1");
            hashMap.put(10,"数字10");
            String result = hashMap.get(10);
    

    可以通过Key得到相应的Value。
    其中Map有三个方法

    • KeySet
    • values
    • entrySet

    分别返回Map中存储的键值对的Key集合、Value集合、存储键值对的Entry的类集合。这也就是为什么说虽然Map不继承自Collection,但通常也说Map是Java集合框架中的一员。

    相关文章

      网友评论

        本文标题:Java 集合框架

        本文链接:https://www.haomeiwen.com/subject/sxamghtx.html