Java 集合 (1)

128 阅读5分钟

 概述 

       集合是java存储对象数据的一种容器;

 特点 

       1. 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定; 

       2. 集合非常适合做元素的增删操作。

       注意 : 集合中只能存储引用类型数据,如果要存储基本类型数据可以选用包装类;

 集合类体系结构

        1. Collection 单列集合,每个元素(数据)只包含一个值;

        2. Map 双列集合,每个元素包含两个值(键值对); 

 Collection (接口)集合体系 

        1. List (接口)-> ArrayList\LinkedList (实现类);

             特点:有序、可重复、有索引。 

       2. set (接口) -> TreeSet\HashSet -> LinkeHashSet (实现类);

             特点: 无序、不重复、无索引。

             HashSet: 无序、不重复、无索引,LinkeHashSet:有序、不重复、无索引。

             TreeSet :按照大小默认升序排序、不重复、无索引。 

集合对泛型的支持 

         集合都是支持泛型的,可以在编译阶段约束集合元素类型。 

Collection 常用Api  

             add() 添加,添加成功返回true 

             clear() 清空集合元素 

             isEmpty() 判断是否为空 

              size() 获取集合大小

             contains() 判断是否包含某元素

             remove() 删除元素值,默认删除前面第一个元素 。

             toArray() 集合转成数组

             addAll() 将一个集合合并到另一个集合 。

 Collection 遍历方式

迭代器遍历 

        遍历就是一个一个的把容器中的元素访问一遍

        迭代器在Java中的代表式Iterator,迭代器是集合的专用遍历方式。 

        1. Iterator iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引; 

         2. Iterator中的常用方法 

             boolean hasNext() 询问当前位置是否有元素存在,

             E next() 获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。 

 Collection<String> list = new ArrayList(); 
 list.add("java"); list.add("Mybatis"); 
 list.add("SSM"); 
 Iterator<String> it = list.iterator();
 while(it.hasNext()) {
   System.out.println(it.next()); 
 }

增强for循环 

        1.增强for循环:即可以遍历集合也可以遍历数组。

        2. 它是JDK5 之后出现的,其内部原理就是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法。 

        3. 实现Iterable接口的类才可以使用迭代器和增强for,Collection接口实现了Iterable接口;

          for(元素数据类型 变量名: 数组或集合) {

                 // 此处使用变量即可,该变量就是当前元素

             } 

Lambda 表达式

         得益于JDK 8 开始的新技术Lambda表达式,提供了一种更简单、更直接的遍历集合的方式。

          Collection 结合Lambda遍历API > default void forEach(Consumer<? super T> action) 

 Collection<String> list = new ArrayList();
 list.add("java");
 list.add("Mybatis");
 list.add("SSM"); 
 list.forEach(s -> System.out.println(s)); 
 list.forEach( System.out:print);

  常见数据结构学习

数据结构概述

        数据结构是计算机底层存储、组织数据的方式。是指数据相互之间是以什么方式排列在一起的。 

          通常情况下,精心选择的数据结构可以带来更高的运行或着存储效率。

常见数据结构 

      : 后进先出,先进后出 。

          压/进栈  : 数据进入栈模型的过程。

         弹/出栈  : 数据离开栈模型的过程。

     队列 : 先进先出,后进后出。

         入队列  : 数据从后端进入队列模型的过程。

          出队列  : 数据从前端离开队列模型的过程 。

数组

          优点 : 查询数据通过地址值和索引定位,查询任意数据耗时相同(元素在内存中是连续存储的)

          缺点:删除效率低:要将原始数据删除,同时后面每个数据前移。

链表

          链表中的元素是在内存中不连续存储的,每个元素节点包含数据值和下一个元素地址。

          链表查询慢,无论查询哪个数据都要从头开始找;

          增删相对快。

  二叉树

           只有一个根节点,每个节点最多支持两个直接子节点; 

          节点的度 ,节点拥有的子数的个数,二叉树的度不大于2叶子节点度为0的节点也称为终端节点。

          高度: 叶子节点的高度为1,叶子节点的父节点高度为2,以此类推,根节点的高度最高。

,根节点在第一层,以此类推 。

         兄弟节点,拥有共同父节点的节点互称为兄弟节点。

二叉查找树

        又称二叉排序树/二叉搜索树 。

      1.  每一个节点上最多两个子节点;

      2. 左子树上所有的节点值都小于根节点的值;

      3. 右子树上所有节点的值都大于根节点的值。 

平衡二叉树

       在满足查找二叉树的大小规则下,让树尽可能矮小,以此提高查数据的性能。 

        在添加元素后可能导致不平衡:

             基本策略是进行左旋,或者右旋。 

            旋转的4中情况 : 左左、左右、右左、右右。

红黑树

         是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。

         1972年出现,当时被称为平衡二叉B树,1978被修改为“红黑树” 

        每一个节点可以是红或者黑,红黑树不是通过高度平衡的它的平衡是通过红黑规则 进行实现的。 

红黑规则

         1. 每一个节点或是红色的,或者是黑色的,根节点必须是黑色 ;

         2. 如果一个节点没有子节点。或父节点,则该节点相应的指针属性值为nil,这些nil视为叶节点,是黑色的。 

         3. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况) 。

        4. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数据的黑色节点。

  添加节点 :

        添加的节点的颜色,可以是红色,也可以是黑色 

  默认用红色效率高 。