• java-day12


    数据结构

      常用的数据存储结构:栈,队列,数组,列表,红黑树。

      栈:先进后出(入口和出口在用一侧)

      队列:先进先出

      数组:

        查询快:因为数组的地址是连续的,通过数组的首地址找到数组中的元素。

        增/删慢:因为数组的长度是固定的,增/删一个元素,需要创建一个新的数组

      链表:

        查询慢:链表中的地址不是连续的,每次查询都必须从头开始。

        增/删快:链表结构增删一个元素对链表的整体结构没有影响。

        链表的每一个元素也称为一个节点,每个节点包含一个数据源,两个指针域  |自己的地址|数据|下一个节点的地址|

        单向链表:只有一条链子,不能保证元素的顺序

        双向链表:有两条链子,有一条链子专门用来记录元素的顺序,是一个有序集合

      红黑树:

        二叉树:分支不能超过两个

        排序树/查找树:在二叉树的基础上,元素有大小顺序,左子树小,右子树大

        *衡树:左子树数量等于右子树数量

        不*衡树:左子树数量与右子树数量不一样

        红黑树:趋*与*衡树,查询速度快

          约束:1.节点可以是红色或是黑色 2.根节点是黑色的 3.叶子节点是黑色的 4.每个红色节点的子节点都是黑色的 5.任何一个节点到齐每个叶子节点的所有路径上黑色系欸但数相同

    List集合

      Collectgion子类,有序,可重复,有索引

    List接口中带索引的方法

      创建List对象

      List<String> list = new ArrayList<>()

      add(index,element)  添加元素

      remove(index)  删除元素,有返回值

      set(index,element)  用指定元素替换指定位置的元素,返回替换元素

      get(index)  获取指定位置元素

    List的实现类

      ArrayList集合(底层是一个数组)

        查询快,增删慢

      LinkedList集合(底层是一个链表)

        查询慢,增删快

        有大量操作首尾的方法:addFirst(),addLast().removeFirst(),removeLast(),getFirst(),getLast().

      LinkedList集合有特用方法,所以不能用多态创建

      LinkedList<E> linked =new LinkedList<>()

      Vector集合(底层是一个数组)

    Set集合

      HashSet实现类 (底层是一个哈希表结构)查询快

        无须,不可重复,无索引

        创建  Set<E> set = new HashSet<>(); 使用迭代器或增强for循环遍历

      哈希值:一个十进制的整数,由系统随机给出(就是对象的地址是一个逻辑地址,是模拟出来的,不是数据存储的实际物理地址)

      在Object类中有一个方法可以获取对象的哈希值 int hashCode() 返回对象的哈希码值

      哈希表结构:数组+链表/红黑树(提高查询速度,当链表的个数大于8位时,用红黑树)

      数组结构:把元素进行分组(相同的哈希值元素一组)

      链表/红黑树结构:把相同哈希值连接到一起

      Set集合中不允许有重复元素的原理

        Set集合调用add方法时,会调用元素的hashCode方法和equals方法判断元素是否重复(先调用hashCode方法后调用equals方法)

      HashSet存储自定义类型元素,存储的元素必须重写hashCode方法和equals方法

      LinkedHashCode集合

      底层是一个哈希表和链表,多了一条列表记录元素的存储顺序保证元素有序,有序,不可重复

    可变参数:底层是一个数组

      当方法的参数列表数据类型已确定,但是参数的个数不确定就可以使用可变参数

      使用格式:修饰符 返回值类型 方法名(数据类型...变量名){}

      使用:

        定义一个初始化变量,遍历数组

      注意事项:1.一个方法只能有一个可变参数 2.一个有多个参数列表时,可变参数要放在最后面

      可变参数的特殊写法:修饰符 返回值类型 方法名(Object...obj){}

    Collections工具类

      addAll():一次性添加多个元素

      shuffle():打乱集合顺序

      sort():默认规则排序(升序)

      sort(List<T> list,Comparator <? super T>):方法灵活的完成,这个里面就涉及到了Comparator这个接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,比较器具有可比性!顾名思义就是做排序的,通俗地讲需要比较两个对象谁排在前谁排在后,那么比较的方法就是:

      public?int?compare(String?o1,?String?o2)

      两个对象比较的结果有三种:大于,等于,小于。
       如果要按照升序排序,则o1小于o2,返回(负数),相等返回001大于02返回(正数)
      如果要按照降序排序则o1小于o2,返回(正数),相等返回001大于02返回(负数)
    Map集合
      将键映射到值:1.键唯一2.键和值---映射一个键对应一个值3.靠键维护它们的关系
      双列集合:一个key,一个value
    常用方法:
      put(k,v)  添加键和值,key不重复返回null,重复返回被替代的value
      get(k)  获取key对应的value,返回value
      remove(k)  删除key和value,返回value
      containsKey()  判断是否有指定key,有true无false
      containsValue()  判断是否有指定value,有true无false
    遍历Map集合
      Set<K>keySet():把Map集合所有键存到Set集合中,再遍历集合中的key通过key找到value
      Map.Entry<K.V>:在Map接口中有一个内部接口Entry用来记录键和值。
      Set<Map.Entry<K,V>> entrySet():把Map集合内部的多个Entry对象存储到Set集合中,遍历Set集合,使用Entry对象的方法getKey()和getValue()
      HashMap集合:1.基于哈希表(查询速特别快)2.是一个无序的集合
      LinkedHashMap集合 extends HashMap集合:底层是哈希表+链表,是一个有序集合,保证迭代的顺序
    HashMap存储自定义类型,作为key元素需要重写hashCode()和equals(),保证key唯一
    HashTable<k,v>
      底层是一个哈希表,单线程
      不能存储Null值,Null键
     
    JDK9对集合添加的优化
    List接口,Set接口,Map接口里添加了一个静态的方法of
    1.of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
    2.of的返回值是一个已经确定的集合,不能再使用add和put方法添加元素
    3.Set接口和Map接口调用of方法时,不能有重复元素
  • 相关阅读:
    线段树(已修改+补题
    畅通工程
    线段树
    charles
    flash
    mysql node pool
    node简单操作mysql的类
    小于任意数字的随机数
    文件系统的移植
    驱动
  • 原文地址:https://www.cnblogs.com/324fch/p/11733974.html
Copyright © 2020-2023  润新知