zoukankan      html  css  js  c++  java
  • Java常用数据结构Set, Map, List

    1. Set

       Set相对于List、Map是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

    特点:

    •  它不允许出现重复元素;
    • 不保证和政集合中元素的顺序
    • 允许包含值为null的元素,但最多只能有一个null元素

    Set是一个接口,实例化Set可以采用下面的方式:

    • HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快 
    • TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序 

    Set的基本操作:

    • boolean add(Object o)      :向集合中加入一个对象的引用
    • void clear()                        :删除集合中所有的对象,即不再持有这些对象的引用
    • boolean isEmpty()             :判断集合是否为空
    • boolean contains(Object o): 判断集合中是否持有特定对象的引用
    • Iterartor iterator()                : 返回一个Iterator对象,可以用来遍历集合中的元素
    • boolean remove(Object o)  :从集合中删除一个对象的引用
    • int size()                              :返回集合中元素的数目
    • Object[] toArray()                :返回一个数组,该数组中包括集合中的所有元素

     2. Map

    Map 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。 Map没有继承于Collection接口 从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。 

    Map是一个接口,实例化Map可以采用下面的方式:

    • HashMap //Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子load factor,以调整容器的性能。 
    • LinkedHashMap  //类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。 
    • TreeMap //底层是二叉树数据结构,线程不同步,可用于给Map集合中的键进行排序。
    • HashTable //HashMap是Hashtable的轻量级实现,非线程安全的实现他们都实现了map接口,主要区别是HashMap键值可以为空null,效率可以高于Hashtable。
    • ConcurrentHashMap //ConcurrentHashMap通常只被看做并发效率更高的Map,用来替换其他线程安全的Map容器,比如Hashtable和Collections.synchronizedMap。
    • WeakHashMap //弱键(weak key)Map,Map中使用的对象也被允许释放: 这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。
    • IdentifyHashMap //使用==代替equals()对“键”作比较的hash map
    • ArrayMap //ArrayMap是一个<key,value>映射的数据结构,它设计上更多的是考虑内存的优化,内部是使用两个数组进行数据存储,一个数组记录key的hash值,另外一个数组记录Value值,它和SparseArray一样,也会对key使用二分法进行从小到大排序,在添加、删除、查找数据的时候都是先使用二分查找法得到相应的index,然后通过index来进行添加、查找、删除等操作,所以,应用场景和SparseArray的一样,如果在数据量比较大的情况下,那么它的性能将退化至少50%。
    • SparseArray //SparseArray比HashMap更省内存,在某些条件下性能更好,主要是因为它避免了对key的自动装箱(int转为Integer类型),它内部则是通过两个数组来进行数据存储的,一个存储key,另外一个存储value,为了优化性能,它内部对数据还采取了压缩的方式来表示稀疏数组的数据,从而节约内存空间。

    Map的基本操作:

    • Object put(Object key, Object value): 向集合中加入元素   
    • Object remove(Object key): 删除与KEY相关的元素   
    • void putAll(Map t):  将来自特定映像的所有元素添加给该映像   
    • void clear():从映像中删除所有映射   

    3.  List

    List列表类,顺序存储任何对象(顺序不变),可重复。

    List是继承于Collection的接口,不能实例化。实例化可以用:

    • ArrayList(实现动态数组),查询快(随意访问或顺序访问),增删慢。整体清空快,线程不同步(非线程安全)。数组长度是可变的百分之五十延长
    • LinkedList(实现链表),查询慢,增删快。
    • Vector(实现动态数组),都慢,被ArrayList替代。长度任意延长。线程安全(同步的类,函数都是synchronized)
    • Stack(实现堆栈)继承于Vector,先进后出。

    List基本操作

    • 插入:add()
    • 查找:get()
    • 删除:remove(int index)
    • 修改:set()
    • 清空表:clear()
    • 遍历:用Iterator迭代器遍历每个元素
  • 相关阅读:
    equals 和 == 的区别
    jenkins
    状态码
    对控制反转和依赖注入的突然顿悟
    分布式事务与Seate框架
    synchronized原理
    VS 添加 Sqlserver
    C# 生成二维码
    jQuery /Date(0000000000000)/日期转换
    什么是Java的序列化,在哪些程序中见过Java序列化?
  • 原文地址:https://www.cnblogs.com/nicoleTeng/p/7410066.html
Copyright © 2011-2022 走看看