java基础知识(一)

Java容器

java基础知识(一)_第1张图片
image.png
  • List (不唯一)

    • ArrayList(查询)
      • 底层结构是数组,查询快,增删慢
      • 线程不安全,效率高
    • Vector(安全)
      • 底层结构式数组,查询快,增删慢
      • 线程安全,效率低
    • LinkedList(增删)
      • 底层结构式双向链表,查询慢,增删快
      • 线程不安全,效率高
  • Set (元素唯一)

    • HashSet(唯一)
      • 底层结构是哈希表
      • 通过hashCode()和equals()保证元素的唯一性,方法自动生成
      • LinkedHashSet(有序且唯一)
        • 底层结构是链表加哈希表,由链表保证元素有序,由哈希表保证元素的唯一
    • TreeSet(排序)
      • 底层结构是红黑二叉树
      • 通过比较返回值是否为0来保证元素的唯一
      • 排序方式:自然排序,比较器排序
  • Map

    • HashMap
      • 键唯一,值不唯一,可null值null键
      • 底层结构是哈希表,查询增删效率更高(jdk1.8改用红黑树存储而非哈希表)
        • LinkedHashMap
        • 底层结构是链表加哈希表,
        • 有序,但是这里的有序相比较于TreeMap的有序,主要体现在先进先出这里
    • TreeMap
      • 有序,保证顺序,因为实习那了SortedMap接口
      • 因为有序,所以不能有null键
    • ConcurrentHashMap
      • segment段锁来实现线程安全
      • 可以理解为由多个hashTable组成,所以它允许获取不用段锁的线程同时持有该资源,segment有多少个,理论上就可以同时有多少个线程来持有他这个资源!segment是一个数组,默认长度是16

数据结构

  • 数组

    • 连续储存多个元素,元素通过下标访问
    • 大小固定后无法扩容,只能储存一种类型的数据,增删操作慢,因为要移动其他元素
    • 按照索引查询快,遍历也方便
    • 先进后出,后进先出,只能在栈顶进行操作
  • 队列

    • 先进先出,一端添加元素,另一端取出元素
  • 链表

    • 非连续,非顺序,每个元素包含两个节点,一个是元素的储存地址,一个是下一个节点地址的指针,根据指针的指向,可以形成不同的结构比如:
    • 增删很快,但是太占用内存空间,查询需要遍历元素,所以查询速度慢
    • 单链表
    • 双向链表
    • 循环链表
    • 由n(n>=1)个有限的节点组成的一个有层次关系的集合,像一棵树,但是是倒挂的,根向上,叶子 朝下
    • 一对多,每个节点有零个躲着多个子节点
    • 没有父节点的节点是跟节点
    • 每一个非跟节点有且只有一个父节点
    • 除了跟节点外,每个子节点可以分为多个不相交的子树
    • 二叉树
      • 每个节点都最多只能拥有两个子节点
      • 左子树和右子树是有顺序的,顺序不能颠倒,即使某个节点只有一个子节点,也要区分左右子树
      • 是链表和数组二者的优化方案,适合处理大批量的动态数据
      • 平衡二叉树
      • 红黑树
      • B+树
  • 哈希表(散列表)

    • 根据关键码和值直接进行访问,通过key和value来映射到集合中的一个位置
    • 堆总是一个完全二叉树
    • 由节点的有穷集合和边的集合组成

排序算法

  • 插入排序
  • 希尔排序
  • 选择排序
  • 冒泡排序
  • 归并排序
  • 快速排序
  • 堆排序
  • 基数排序

你可能感兴趣的:(java基础知识(一))