Java基础(6)-----容器

思维导图

下图中,绿色方框的是接口,红色的是抽象类,蓝色的具体类。绿色虚线表示实现接口

 Java的容器类中有大量的容器,按照所含有的元素不同分为Collection和Map,Collection含有的元素就是通常情况下的一个元素,而Map中含有的元素是“一组映射”,“一组映射”里包含了健和值,也就是通常所说的键值对。

Collection中申明了一般常用的方法,比如add,remove,contains,toArray,isEmpty,clear等等,是“集合类”的骨架,其中一些方法标记为可选操作,意义是有些实现类不支持这个方法,比如Arrays.asList所得到的集合。Collection 实现了Iterator接口,表示可得到迭代器。在collection之下,有三个接口,分别为List,Set,Queue,三个接口,功能如下

  • List,主要表示一类允许重复元素,且排列有序的集合声明的主要的添加的方法则是get和set因为List实现了ListIterator接口,所以可以获得LinkIterator迭代器
  • Set,主要表示的是一类不允许重复元素的集合,并没有申明不同于Collection接口的方法 

          有子类接口SortedSet,表示有序,SortedSet有子类接口NavigableSet,表示可以导航似的选择元素。

  • Queue,主要表示一类输入输出有序的集合(先来后到)申明了element,peek,remove,poll,offer

        有子类接口Deque,表示双向队列,BlokingQueue表示有锁的队列,常用于并发。

此外,Collection为了方便子类的实现,写了一个抽象类AbstractCollection,尽最大程度的实现了一部分方法,有contains,toArray,remove,retainAll和clea,这些方法都借助于iterator迭代器实现,而此时,只有Iterator接口,没有它的具体实现。所以,他的继承抽象类又继续实现了部分方法。

  • AbstractList:主要实现了两个迭代器,Iterator和LinkIterator,通过匿名内部类的方式实现。

        在AbstractList之下,三个子类

              ArrayList:使用数组来实现,优点是随机访问快,随机添加移除元素则慢

             Vector:底层数据结构也是数组,不过Vector可以实现自动增长,在Vector之后由子类Stack,最好别用

             AbstractSequentiaList:则最大程度的实现了“连续访问”的方法,具体的实现则是其子类LinkedList,添加删除元素快,随机访问则慢。

  • AbstractSet:没有重要的实现

       在AbstractSet之下,由几个具体的实现类

            HashSet:底层的数据结构是HashMap,利用散列算法实现了Set中的元素两两不同,和放入的位置随机。HashSet由子类,LinkedHashSet,底层数据结构是LinkedHashMap,实现了按照放入的顺序访问元素,原理看下面说的LinkedHashMap。

            TreeSet:通过实现NavigableSet接口实现了元素的有序访问,底层数据结构是红黑数,所以涉及到元素之间的比较,因此,放入TreeSet中的元素必须实现Comparable接口。

  • AbstractQueue:没有重要的实现

            队列在并发时用的多,以后再写。

初次之外,AbstractCollction还有一个子类,叫ArrayDeque,实现了Deque接口,是用数组实现的双向队列。

Map

map的结构比Collection精简了许多,在Map接口中,声明了一个内部接口,Entry,他是键值对的抽象。与Collection不同,Map中主要的方法是put,set,get,并提供了三种视图:Set<K> keySet():关键字的Set          Collection<V> values():值的结合

Set<Map.Entry<K, V>> entrySet():entry的Set。

Map下的功能性接口有

  • SortedMap,提供有序的排列,其子接口NavigableMap则提供导航性的功能,比如获得在什么值以下的所有值
  • ConcurrentMap:提供并发时的安全保证

有抽象类:AbstractMap,它实现了keySet,同过匿名内部类返回AbstractSet并调用其iterator从而得到keySet,也实现了values,方法大同小异,并没有实现entrySet,在抽象类下,则是各种具体的实现类了

          HashMap:底层数据结构时Entry数组,通过散列算法放入元素键值对。子类有LinkeHashMap,原理是在Entry中加入了afer和previous两个引用指向前一个后后一个entry,就像LinkedList一样,所以拥有可预知的迭代顺序。

          TreeMap:实现了Navigable接口,Navigable接口实现了SoredMap,所以功能和SortedSet差不多。底层数据结构也是红黑树。

     

 

    

猜你喜欢

转载自blog.csdn.net/zh328271057/article/details/81544349
今日推荐