Collection、List、泛型、数据结构

Collection 接口是单例集合的顶层接口,其中定义单列集合共有的方法。
Collection
     - List  存取有序,有索引,元素可重复
         - ArrayList     基于数组,查询快,增删慢
         - LinkedList    基于链表,查询慢,增删快
     - Set   无索引,元素不可重复
         - HashSet           存取无序,基于哈希表+红黑树
             - LinkedHashSet 继承自 HashSet,存取有序,在 HashSet 的基础上增加了链表结构
         - TreeSet           存取无序,基于红黑树,支持元素排序
     常用方法
         boolean add(E e)            //添加元素到集合中
         void clear()                //清空集合
         boolean contains(Object o)  //判断集合中是否包含某个元素
         boolean isEmpty()           //判断集合是否为空
         int size()                  //获取集合元素数量
         boolean remove(Object o)    //移除集合中指定的元素
         <T> T[] toArray(T[] a)      //集合转数组
         Iterator<E> iterator()      //获取迭代器
     迭代器
         Iterator 接口是迭代器
             boolean hasNext()       //判断是否有下一个元素可以迭代
             E next()                //获取下一个元素
         使用
             //集合
             Iterator<String> it = col.iterator();
             while (it.hasNext()) {
                 String ele = it.next();
                 //...
             }
         注意事项:
             1、迭代器是一次性的,不能重复使用
             2、在使用迭代器迭代集合的过程中,不允许增加或删除集合中的元素,否则会抛出 ConcurrentModificationException
             3、如果已经迭代到末尾,就不能使用 next() 方法获取元素了,否则会抛出 NoSuchElementException
     增强 for 循环
         语法格式
             for (数据类型 变量名 : 集合 or 数组) {
                 //...
             }
         由于增强 for 循环底层基于迭代器,所有在遍历的过程中也不能对集合中的元素进行添加或删除操作。
     泛型,是 Java 提供的一种编译期的类型安全检查机制,避免类型错误。
         泛型类
             public class 类名<泛型> {
             }
             泛型类中泛型的具体类型是在类的对象被创建时确定的,如果不指定,默认是 Object。
         泛型方法
             public <泛型> 返回值类型 方法名(形参列表...) {
             }
             泛型方法中泛型的具体类型是方法被调用时确定的。
         泛型接口
             public interface 接口名<泛型> {
             }
             泛型接口中泛型的具体类型可以由实现类指定,也可以延迟到实现类创建对象时指定。
     泛型通配符
         语法格式:<?>
         受限泛型
             上限
                 <? extends 上限类型>    //表示能够接收上限类型及其子类
             下限
                 <? super 下限类型>      //表示能够接收下限类型及其父类
数据结构
     线性结构
         栈:先进后出
         队列:先进先出
         数组:查询快,增删慢
         链表:查询慢,增删快
     树结构
         二叉树:每个节点的子节点数量不超过2
         二叉查找树:在二叉树的基础上增加左小右大的规则,但二叉查找树有可能退化成链表。
         平衡二叉树:是一种自平衡的二叉查找树,判断是否平衡的依据是左右子树的高度差的绝对值不能超过1,否则需要旋转。
             左左:右旋
             右右:左旋
             左右:先对左子树左旋,再对自己右旋
             右左:先对右子树右旋,再对自己左旋
         红黑树:牺牲了一些查询效率,换来了较高的增删效率
List 集合
     常用的方法
         void add(int index, E element);     //添加元素到指定的索引位置
         E remove(int index);                //移除指定位置的元素
         E set(int index, E element);        //替换指定位置的元素
         E get(int index);                   //获取指定位置的元素
     ArrayList
     LinkedList
         addFirst        //添加元素到链表的头部
         addLast         //添加元素到链表的尾部
         getFirst        //获取链表头部的元素
         getLast         //获取链表尾部的元素
         removeFirst     //移除链表头部的元素
         removeLast      //移除链表尾部的元素
         push            //作为栈来使用,入栈,等同于 addFirst
         pop             //作为栈来使用,出栈,等同于 removeFirst
斗地主案例
     准备牌(使用字符串拼接)
     洗牌(Collections.shuffle)
     发牌(循环取余)
     看牌(直接打印)
上一篇:PG的延迟复制及相关参数的设置影响


下一篇:数据源的获取