Java学习 - 容器基本知识框架

Java容器知识框架

参考: 原文链接

Java容器是前人为我们设计好的数据结构

本文意在介绍Java容器的基本知识框架,而不会过多介绍某一个具体的容器的使用方法。

一、常用Java容器(仍有少量容器未在图中展示)

image-20201019211836953

可以看出,Java的容器简要分为两个部分,一个是Collection,另一个是Map。之所以这样分类,是因为Collection的各种数据结构都是单元素的集合,而Map则是键值对的集合。

Collection接口

在学习容器的具体用法之前,我们有必要分析一下上图。Collection本身是一个最基本的集合接口,它定义了一组允许重复的对象。Collection接口派生出了三个子接口List,Queue,Set

  • List接口

    List的特点就是所有的元素是可以重复的。List接口在Collection的基础上增加了很多的方法。

    List主要分为ArrayListLinkedList,前者底层是使用数组实现的List,后者是使用链表实现的List。

    Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。

    Stack是满足“后进先出”规则的容器,注意LinkedList可以实现所有的栈功能。

  • Queue

    队列是一个满足FIFO的数据结构。
    LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue

    • offer:讲一个元素插入对尾
    • peek:不移除的情况下将元素插入队尾,队列为空返回null
    • element:不移除的情况下将元素插入队尾,队列为空报错
    • poll:移除并返回队头,队列为空返回null
    • remove:不移除的情况下将元素插入队尾,队列为空报错

    PriorityQueue是优先级队列,我们暂时先不介绍

  • Set

    set代表的是数学上的集合的意思,所以set中的元素不可以重复。
    所以set中查找是最为重要的操作,而对于查找来说,我们最常用的就是HashSet

    • HastSet底层是使用散列函数,在查询的方面有优化
    • TreeSet底层使用的是红黑树

Map接口

Map是使用键值对存储的一种结构,所以在处理列如单词统计等方面是杀手锏
Map的键值对都可以为null
Map可以多维扩展。例如一个人拥有多个宠物,你可以这样定义:Map< Person, List< pet>>

  • Object put(Object key, Object value):放进一个键值对,返回值是被替换的值
  • Object remove(Object key)
  • void putAll(Map mapping)
  • void clear()
  • boolean containsKey(Object key)是否包含某个键
  • boolean containsValue(Object value)是否包含某个值

在Map中比较重要的是处理键值对的集合

  • public Set keySet():返回这个Map的所有键的集合,因为Map中键是唯一的,所以返回使用一个set
  • public Collection values():返回这个Map的所有值的集合,因为值可能重复,所以返回一个Collection
  • public Set entrySet():返回一个实现Map.Entry接口对象集合,使用这个方法可以遍历每一条记录。
posted @ 2020-10-19 21:34  popozyl  阅读(252)  评论(0编辑  收藏  举报