zoukankan      html  css  js  c++  java
  • JAVA容器

    JAVA容器大致包括两大阵营:Collection和Map。

    先来看一下Collection。

    1. Collection

    Collection首先实现了迭代器Iterator,这样所有Collection的子类都可以使用Iterator进行遍历。

    2. List,ArrayList,LinkedList

    List,有序可寻址容器

    ArrayList,基于数组实现,存储空间连续,寻址容易,但是执行删除和插入困难。

    LinkedList,实现了Deque和List两个接口,基于链表实现,特点是寻址困难,但是执行插入和删除操作容易。

    3. Vector和Stack

    Vector和Stack是古老的容器,不建议使用,如果需要用到栈,可以用ArrayDeque替代。

    4. Set,TreeSet,HashSet,LinkedHashSet

    Set是无序的不能寻址的容器,且里面没有重复项。

    TreeSet,将元素按照红黑树存储,能够对元素进行排序。

    HashSet,根据哈希算法寻址存储元素,后面会详细介绍。

    LinkedHashSet,使用链表来维护元素的次序,元素看起来像按元素插入的顺序来访问集合里的元素。插入性能略低于HashSet,但是利用迭代遍历全部元素时,性能优于HashSet。

    4. Queue,PriorityQueue,Deque,ArrayDeque

    Queue,先入先出的容器。

    PriorityQueue,违背了先入先出的原则,会对元素按照大小重排,先输出最小的元素。

    Deque,双向队列,可以从队首和队尾插入元素。

    ArrayDeque,可以用来替代Stack。


     

    关于Map我们用到的主要如图中所示:

    1. HashMap,LinkedHashMap

    通过Key的HashCode计算存储位置

    LinkedHashMap能够保证插入顺序和迭代顺序一致

    2. TreeMap

    能够保证所有的key-value处于有序的状态


    操作集合的工具类:Collections

    包括排序操作,查找替换操作,同步控制,设置不可变集合(只读版本的集合)

    同步控制可以将指定集合包装成线程同步的集合,将线程不安全变为线程安全。


    推荐阅读博文 http://www.cnblogs.com/LipeiNet/p/5888513.html


    HashSet和HashMap的深入讨论

    HashCode

    equals

    有时候需要重写equals和HashCode,原则是保证当两个对象通过equals返回true时,也需要两个对象的hashCode方法返回相等的值。

    因为当多个元素的hashCode相同但是equals方法返回false时,就需要在一个桶里放多个元素,这样会导致性能下降。


    顺便讨论一下==和equals

    两个引用类型变量,只有当他们指向同一个对象时,==判断才会返回true。

    Object提供了equals的实现,和==相同。String重写了这个方法用来比较字符串相同。

  • 相关阅读:
    C# 加载 SQLite DLL问题
    Linux chroot 并使用之前系统设备节点
    I.MX6 initramfs.cpio.gz.uboot unpack
    I.MX6 eMMC 添加分区
    Git 一次性 pull push 所有的分支
    ARM compiler No such file or directory
    Linux sed 替换第一次出现的字符串
    C# WinForm 应用程序 开启Console窗口
    No 'Access-Control-Allow-Origin' header is present on the requested resource.
    C# 集合已修改;可能无法执行枚举操作
  • 原文地址:https://www.cnblogs.com/xdlaoliu/p/6934030.html
Copyright © 2011-2022 走看看