Java 集合框架

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 {
    
    Iterator iterator();
    //还有两个default接口
    ...
    ...
}

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

public interface Iterator {
   
    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumer action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

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

        ArrayList arrayList = new ArrayList<>();
        //Iterator接口中定义的方法,这个额迭代器的具体实现在ArrayList中以内部类的形式存在
        Iterator 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
  • ......
3.List

特性:

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

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

4.Set

特性:

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

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

public interface Queue extends Collection {
  

    //插入队尾
    boolean offer(E e)
    //得到队头元素并移除
    E poll();
    //得到对头元素不移除
    E peek();
}

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

public interface Deque extends Queue {
    //push 元素 入栈
    void push(E e);

    //pop  元素 出栈
    E pop();


Map

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

        HashMap 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 集合框架)