• Java集合源码分析(一)——集合框架


    集合框架

    集合框架如图所示
    在这里插入图片描述
    Java集合是Java提供的工具包,主要包括常用的数据结构,包括:集合、链表、队列、栈、数组、映射等。
    集合的工具包位置是java.util.*

    集合主要可以分为五类:

    • List列表;
    • Set集合;
    • Map映射;
    • Queue队列
    • 工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)。

    其中也可以主要分为Colleciton和Map两大类。

    Collection

    它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。
    定义:

    public interface Collection<E> extends Iterable<E> {}
    

    Collection是一个接口,下面又有Queue、List、Set三个分支。其中Queue和List是有序可重复的,Set是无序不重复的。而Queue和List的本质是一样的,都是列表,不过抽象出的接口不同罢了。

    再看接口下面,为了实现代码的复用,又抽象出了AbstractCollection、AbstractList、AbstractSet几个抽象类。

    最底层就是具体的实现类了。

    Collection还实现了Iterator接口,返回一个iterator()函数,这样可以使得Collection接口下的实现类都能被迭代器进行一个迭代遍历。

    List

    定义:
    List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。允许有重复元素。

    public interface List<E> extends Collection<E> {}
    

    Set

    定义:
    Set是一个继承于Collection的接口,即Set也是集合中的一种。Set是没有重复元素的集合,无序。

    public interface Set<E> extends Collection<E> {}
    

    AbstractCollection

    定义:
    AbstractCollection是一个抽象类,它实现了Collection中除iterator()和size()之外的函数。这样下面的list或者set继承了之后就不需要再重复实现一些代码了。

    public abstract class AbstractCollection<E> implements Collection<E> {}
    

    AbstractList

    定义:
    AbstractList是一个继承于AbstractCollection,并且实现List接口的抽象类。它实现了List中除size()、get(int location)之外的函数。它还实现了iterator接口。

    public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> {}
    

    AbstractSet

    定义:
    AbstractSet是一个继承于AbstractCollection,并且实现Set接口的抽象类。由于Set接口和Collection接口中的API完全一样,Set也就没有自己单独的API。实现Set中大部分函数。

    public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
    

    Iterator

    定义:
    Iterator是一个接口,它是集合的迭代器。集合可以通过Iterator去遍历集合中的元素。Iterator提供的API接口,包括:是否存在下一个元素、获取下一个元素、删除当前元素。

    public interface Iterator<E> {}
    

    ListIterator

    定义:
    ListIterator是一个继承于Iterator的接口,它是队列迭代器。专门用于便利List,能提供向前/向后遍历。相比于Iterator,它新增了添加、是否存在上一个元素、获取上一个元素等等API接口。

    public interface ListIterator<E> extends Iterator<E> {}
    

    Map

    Map就是映射接口,实现Map接口的容器都是需要存储键值对的。基本操作就是存储、获取、删除、查找、获取容量大小等,这就有点像数据库。

    定义:

    public interface Map<K,V> { }
    

    特点:

    • 键不能重复,一个键只能映射一个值。
    • 有些实现类能保持顺序,有些不能。

    Map.Entry

    interface Entry<K,V> { }
    

    Map的内部接口,用来定义键值对,可以通过entrySet()获取键值对的集合。

    AbstractMap

    public abstract class AbstractMap<K,V> implements Map<K,V> {}
    

    Map接口的主要实现抽象类,减少后面具体实现类的重复代码。

    SortedMap

    public interface SortedMap<K,V> extends Map<K,V> { }
    

    用于规范有序键值对Map的接口,可以进行自然排序和实现Comparable接口的元素的排序。

    NavigableMap

    public interface NavigableMap<K,V> extends SortedMap<K,V> { }
    

    继承与SortedMap的接口,它是一个可导航的键值对集合,具有了为给定搜索目标报告最接近匹配项的导航方法。

    所谓可导航,就是可以获取对应范围的键值对,可以获取键集。

    Dictionary

    public abstract class Dictionary<K,V> {}
    

    是JDK 1.0定义的键值对的接口,它也包括了操作键值对的基本函数。

    Set

    • Set 是继承于Collection的接口。它是一个不允许有重复元素的集合。
    • 有两个实现类
      • HashSet依赖于HashMap,它实际上是通过HashMap实现的。HashSet中的元素是无序的。
      • TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。TreeSet中的元素是有序的。

    AbstractSet

    public abstract class AbstractSet<E> extends AbstractCollection<E> implements Set<E> {}
    

    AbstractSet 是一个抽象类,它继承于AbstractCollection,AbstractCollection实现了Set中的绝大部分函数,为Set的实现类提供了便利。

    其中实现了equals、hashCode、removeAll函数。

    SortedSet

    public interface SortedSet<E> extends Set<E> {}
    

    SortedSet是继承Set的接口,多了几个有序读取的接口函数,还有比较器函数。

    NavigableSet

    public interface NavigableSet<E> extends SortedSet<E> {}
    

    继承于SortSet,多了几个有序的读取函数,和有序的集合获取函数。

  • 相关阅读:
    string的erase函数和find、find_first_of函数
    strtok和strtok_r
    Linux添加硬盘 挂载硬盘(附 Linux磁盘挂载和mount共享 带图)
    linux下访问中文目录文件
    用yield写协程实现生产者消费者
    用进程池和线程池实现高并发服务器
    python自带线程池
    python自带进程池
    模拟线程池代码
    面向对象的多次调用线程(含参版)
  • 原文地址:https://www.cnblogs.com/lippon/p/14117610.html
Copyright © 2020-2023  润新知