zoukankan      html  css  js  c++  java
  • java集合类学习心得

    java集合类学习心得

    看了java从入门到精通的第十章,做个总结,图片均取自网络。

    常用集合的继承关系


    Linked 改快读慢

    Array 读快改慢

    Hash 两都之间

    Collection是集合接口

        |————Set子接口:无序,不允许重复。

        |————List子接口:有序,可以有重复元素。

        区别:Collections是集合类

        Set和List对比:

        Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

        List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

        Set和List具体子类:

        Set

         |————HashSet:以哈希表的形式存放元素,插入删除速度很快。

        List

         |————ArrayList:动态数组

         |————LinkedList:链表、队列、堆栈。

        Array和java.util.Vector

    Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。

    List接口

    常用方法


    add(2,obj)表示在索引值为2的位置添加对象obj,并将原来索引值为2的对象及其以后的所有对象向后移一位。注意,索引值从0开始。

    set(2,obj)表示将索引值为2的对象的值设为obj,原来的值被舍弃了。

    List集合可以包含相同的对象。

    实现类

    常用实现类有ArrayList和LinkedList。

    ArrayList类采用数组结构存储数据,允许所有元素,包括null。优点:根据索引位置对集合进行快速随机访问。缺点:在指定索引位置进行插入或者删除速度较慢。(插入一个需要对其后位置的所有数据都进行操作(后移))

    语法格式:List<String> list = newArrayList<String>();

    LinkedList类采用链表结构存储数据。优点:插入删除操作的速度较快。缺点:随机访问的速度较慢。(访问一个数据,必须从表头逐个访问到该位置)

    语法格式:List<String> list = new LinkedList<String>();

    Set接口

    常用方法

     

    Set集合不允许存储相同的对象,因此可以通过Set集合中的爱的addAll()方法,将Collection集合添加到Set集合中并实现去重。

    实现类

    常用实现类有:HashSet和TreeSet

    HashSet实现了Set接口的hash table(哈希表),依靠HashMap来实现.所以不能有重复的元素,要根据哈希算法计算存储位置。

    TreeSet是依靠TreeMap来实现的。TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中元素要实现Comparable接口。

    在更多情况下,您会使用 HashSet 存储重复自由的集合。考虑到效率,添加到 HashSet 的对象需要采用恰当分配散列码的方式来实现hashCode() 方法。虽然大多数系统类覆盖了 Object 中缺省的hashCode()实现,但创建您自己的要添加到 HashSet 的类时,别忘了覆盖 hashCode()。当您要从集合中以有序的方式抽取元素时,TreeSet 实现会有用处。为了能顺利进行,添加到TreeSet 的元素必须是可排序的。 “集合框架”添加对 Comparable 元素的支持,在排序的“可比较的接口”部分中会详细介绍。我们暂且假定一棵树知道如何保持java.lang 包装程序器类元素的有序状态。一般说来,先把元素添加到 HashSet,再把集合转换为TreeSet 来进行有序遍历会更快。

    为优化 HashSet 空间的使用,您可以调优初始容量和负载因子。TreeSet 不包含调优选项,因为树总是平衡的,保证了插入、删除、查询的性能为log(n)。

    HashSet 和 TreeSet 都实现 Cloneable 接口。

    Map接口

    常用方法


    Map集合中的元素是通过key,value进行存储的,要获取集合中的key或者value值,可以通过keySet()和values()获取相应的集合,然后通过迭代器遍历相应的集合获取key或者value。

    常用方法:HashMap和TreeMap

    HashMap 和TreeMap。和所有的具体实现一样,使用哪种实现取决于您的特定需要。在Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按顺序遍历键,那么TreeMap 会更好。根据集合大小,先把元素添加到 HashMap,再把这种映射转换成一个用于有序键遍历的 TreeMap 可能更快。使用HashMap 要求添加的键类明确定义了 hashCode() 实现。有了TreeMap 实现,添加到映射的元素一定是可排序的。

    HashMap允许使用<null,null>键值,而TreeMap不能。

    HashMap实现快速查找,插入和删除,而TreeMap可以实现集合的对象有序排列。

  • 相关阅读:
    新版《星光大道》
    acl 3.1.2版本发布,网络通信与服务器编程框架
    批量将 *.c 预处理为 *.i (递归处理文件夹中所有文件)gcc -E
    texmaker——unknown graphics extension .eps
    TexMaker
    中国计算机学会推荐国际学术会议和期刊目录
    浅谈阶梯博弈
    【hdu 3389】Game
    【hdu 3537】Daizhenyang's Coin
    【hdu 3863】No Gambling
  • 原文地址:https://www.cnblogs.com/kangsir/p/6653309.html
Copyright © 2011-2022 走看看