• HashSet、LinkedHashSet、TreeSet的区别


    HashSet:哈希表是通过使用称为散列法的机制来存储信息的,元素并没有以某种特定顺序来存放;

    LinkedHashSet:以元素插入的顺序来维护集合的链接表,允许以插入的顺序在集合中迭代;  

    TreeSet:提供一个使用树结构存储Set接口的实现,对象以升序顺序存储,访问和遍历的时间很快。

    package com.test;  
      
    import java.util.HashSet;  
    import java.util.LinkedHashSet;  
    import java.util.TreeSet;  
      
    public class SetDemo {  
      
        public static void main(String[] args) {  
      
            HashSet<String> hs = new HashSet<String>();  
            hs.add("B");  
            hs.add("A");  
            hs.add("D");  
            hs.add("E");  
            hs.add("C");  
            hs.add("F");  
            System.out.println("HashSet 顺序:
    "+hs);  
              
            LinkedHashSet<String> lhs = new LinkedHashSet<String>();  
            lhs.add("B");  
            lhs.add("A");  
            lhs.add("D");  
            lhs.add("E");  
            lhs.add("C");  
            lhs.add("F");  
            System.out.println("LinkedHashSet 顺序:
    "+lhs);  
              
            TreeSet<String> ts = new TreeSet<String>();  
            ts.add("B");  
            ts.add("A");  
            ts.add("D");  
            ts.add("E");  
            ts.add("C");  
            ts.add("F");  
            System.out.println("TreeSet 顺序:
    "+ts);  
        }  
    }

    输出结果:

    HashSet 顺序:
    [D, E, F, A, B, C]
     LinkedHashSet 顺序:
    [B, A, D, E, C, F]
    TreeSet 顺序:
    [A, B, C, D, E, F]

    另外,重点区别HashSet、TreeSet:

    1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key

    2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.

    3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.

          a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.

          b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象 才可以真正定位到键值对应的Entry.

          c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value

    4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.

          a. Comparator可以在创建TreeMap时指定

          b. 如果创建时没有确定,那么就会使用key.com

    http://www.cnblogs.com/ibook360/archive/2011/11/28/2266062.html

    http://blog.csdn.net/foart/article/details/4263456

  • 相关阅读:
    查看Linux主机CPU及内存信息
    linux配置java环境变量(详细)
    Linux安装Redis
    Linux关闭防火墙
    使用Unison同步服务器目录
    Nginx详细配置
    CentOS命令行无线上网
    SQL Server查询所有的表名/空间占用量/行数
    CentOS安装Nginx安装详解
    基于 Django 2.0.4 的 djcelery 配置
  • 原文地址:https://www.cnblogs.com/itommy/p/10610405.html
Copyright © 2020-2023  润新知