• JAVA常见集合类


    菜鸟教程

    http://www.runoob.com/java/java-collections.html

    TreesSet原理:

    https://blog.csdn.net/wangyunpeng0319/article/details/78297445

    极客学院常见框架原理分析:

    http://wiki.jikexueyuan.com/project/java-collection/linkedhashset.html

     

     

    Collection是最基本的集合接口,java不提供collection的直接实现类,除map集合外所有集合必须实现Collection接口的子接口,如set接口和list接口。

    Set

           Set是collection接口下的子接口,特征是set集合中的元素是不能重复的,提供的常见实现类HashSet,TreeSet,LinkedHashSet:

     

    HashSet 底层根据元素的HashCode存放和检索数据,因此不允许重复,可以存放null值,但是也只能存放一个,hashset存放和抓取数据都是随机的因此并不能保证数据存放和检出的顺序是一致的。

    LinkedHashSet 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。

    TreeSet 属于集的范围,所以它只能存放引用类型,不能用于基本数据类型,实现了set接口,所以它本身不能有重复的元素,当存入自定义的引用类型的时候就必须考虑到元素不可重复的这个特性,换句话说就必须实现Comparable接口,因为在其内部会调用Comparable接口的compareTo方法来比较两个元素的大小,然后根据红黑树进行排序,这就是自然排序。也就是说TreeSet集合中存放的元素都应该是相同类型元素。除了自然排序,TreeSet也可以进行定制排序,TreeSet的自然排序是根据集合元素的大小,TreeSet将他们以升序排列。如果需要实现定制排序,例如降序,则可以使用Comparator接口。该接口里包含一个int compare(T o1, T o2)方法,该方法用于比较o1和o2的大小。 如果需要实现定制排序,则需要在创建TreeSet集合对象时,并提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排序逻辑。

     

     HashSet,TreeSet,LinkedHashSet之间的区别:HashSet只去重,TreeSet去重并排序,LinkedHashSet去重并保留插入顺序

     

    HashSet

    不能保证有序

    按照hash值存放

    都不允许重复的元素

    TreeSet

    有序的

    按照默认规则排序,也可以自定义

     

    List

    也是collection接口下的子接口,可以存放重复数据,是按照元素下标的方式存放数据,因此可以直接使用下标来存取数据例如list.get(i)的方式;

     

    Arraylist内部使用动态数组的实现原理,因此使用其默认构造方法创建的长度是10,如果内部容量不够时会自动扩充0.5倍,即当前容量*1.5,也因此arraylist在对数据进行插入和删除时的效率是非常低下的。同时arraylist的是非同步是,即线程是不安全的。

    Linkendlist允许插入null值。内部使用双链表的模式对数据进行存储,因此不用考虑容量问题,Linkendlist相比arraylist它的插入和删除的效率是相对高的,但是在对数据进行查询和修改这种需要定位的操作的时候则显的无力,因为它需要拨动指针。Linkendlist没有同步方法,如果涉及多线程访问问题,就必须自己实现访问的同步,解决的方法就是在创建的时候构造一个同步的list,如:

    Listlist=Collections.synchronizedList(newLinkedList(...));

  • 相关阅读:
    一个int类型究竟占多少个字节
    TCMalloc 安装与使用
    [创意标题] spoj 11354 Amusing numbers
    如何更好地理解和使用Github
    一天JavaScript示例-点击图片显示大图片添加鼠标
    php方法综述除去换行符(PHP_EOL使用变量)
    使用jQuery和css3实现了仿淘宝ued博客左边的菜单切换动画
    【软件使用技巧】PL/SQL Developer实现双击table询
    newlisp 接受jenkins带空格的参数
    Oracle listener lsnrctl
  • 原文地址:https://www.cnblogs.com/cx987514451/p/8662319.html
Copyright © 2020-2023  润新知