zoukankan      html  css  js  c++  java
  • List与Set接口

    Collection接口存储一组不唯一无序对象

    List接口存储一组不唯一有序对象

    Set接口存储一组唯一无序对象

    Map接口存储一组键值对象,提供key到value的映射

    LIst接口实现(有序,不唯一)

    ArrayList(顺序表)

    • 实现了长度可变的数组,在内存中分配连续的空间
    • 优点,遍历元素和随机访问元素的效率比较高
    • 缺点,添加和删除需要大量移动元素,效率低,按内容查询效率低

    LinkedList(链表)

    • 采用链表的形式
    • 优点,插入、删除元素效率较高
    • 缺点,遍历和随机访问元素效率较低

     ArrayList与Vector

    • ArrayList线程不安全,效率高,Vector是线程安全的,效率低
    • ArrayList在进行扩容的时候,是扩容1.5倍(OldCapacity + OldCapacity>>1)
    • Vector在进行扩容的时候,是扩容2倍(oldCapacity + ((capacityIncrement > 0)?capacityIncrement:oldCapacity))

    Iterator接口

    • 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
    • Iterator对象称作迭代器,用以方便实现对容器内元素的遍历操作

    增强for循环(本质上用的iterator功能)

    for(Object i:list){
        System.out.println(i)
    }

    所有集合类都默认实现了Iterable的接口,实现此接口意味着具备了增强for循环的能力

    iterator方法,返回一个Iterator的接口子类实例对象

    • 在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常
    • 如果遍历的同时需要修改元素,建议使用listIterator()
    • ListIterator迭代器提供了向前和向后两种遍历方式
    • 始终通过cursor和lastret指针获取元素值及向下的遍历索引
    • 使用向前遍历时必须保证指针在迭代器的结果,否则无法获取结果值

    Set接口中的实现类

    • Set接口存储一组唯一,无序的对象
    • 存入和取出的顺序不一定一致
    • 操作数据的方法与List类似,Set接口不存在get()方法

     Hashset( 采用Hashtable存储结构,即散列的链地址法)

    • 优点,添加速度快,查询速度快,删除速度快
    • 缺点,无序
    • LinkedHashSet,采用哈希表存储结构,同时使用链表维护次序
    • 有序(添加顺序)

    TreeSet

    • 采用二叉树(红黑树)的存储结构
    • 优点,有序(排序后的升序)查询速度比List快
    • 缺点,查询速度没有HashSet快

    红黑树,特殊的平衡树

    • 自平衡二叉查找树
    • 结点是红色或黑色
    • 根结点是黑色
    • 每个叶结点是黑色
    • 每个红色结点两个子结点都是黑色
    • 任一结点到每个叶子所有路径都包含相同数目的黑色结点
    • 最长路径不超过最短路径两倍

    HashSet如何保证元素的唯一性

    • 通过元素的两个方法,hashCode和equals方法来完成
    • 如果元素的HashCode值相同,才会判断equals是否为true
    • 如果元素的hashCode值不同,不会调用equals方法

    TreeSet

    • 采用二叉树的存储结构
    • 优点,有序(排序后的升序)查询速度比list快
    • 缺点,查询速度比HashSet慢

    Comparable接口

    所有可以"排序"的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法

    // 非源码,大概流程
    public int compareTo(Object obj){
        int a, b;
        if(this == obj){
            return 0;
        }
        if(this > obj){
            return a;// 正数
        }
        if(this < obj){
            return b;// 负数
        }
    }

    实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式

  • 相关阅读:
    安装vmware tools 使用hgfs共享文件一波三折
    RedHat停止sendmail加快启动
    [宏]_IO, _IOR, _IOW, _IOWR 宏的用法与解析
    __VA_ARGS__
    超级终端串口发送命令,uboot接收不到
    statfs函数获取大容量磁盘信息速度慢的解决过程
    ctags使用简介
    做技术多久才能入门
    linux目录和文件介绍
    OpenScalesLayer
  • 原文地址:https://www.cnblogs.com/YC-L/p/14209468.html
Copyright © 2011-2022 走看看