TreeSet, LinkedHashSet and HashSet 的区别

1. 介绍

TreeSet, LinkedHashSet and HashSet 在java中都是实现Set的数据结构

# TreeSet的主要功能用于排序

# LinkedHashSet的主要功能用于保证FIFO即有序的集合(先进先出)

# HashSet只是通用的存储数据的集合

2. 相同点

1) Duplicates elements: 因为三者都实现Set interface,所以三者都不包含duplicate elements

2)Thread safety: 三者都不是线程安全的,如果要使用线程安全可以用 Collections.synchronizedSet()

3. 不同点

1)Performance and Speed: HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序

2)Ordering: HashSet不保证有序,LinkHashSet保证FIFO即按插入顺序排序,TreeSet安装内部实现排序,也可以自定义排序规则

3)null: HashSet和LinkHashSet允许存在null数据,但是TreeSet中插入null数据时会报NullPointerException

4. 代码比较

 

public class Test {
    public static void main(String args[]) {
        HashSet<String> hashSet = new HashSet<>();
        LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>();
        TreeSet<String> treeSet = new TreeSet<>();

        for (String data : Arrays.asList("B", "E", "D", "C", "A")) {
            hashSet.add(data);
            linkedHashSet.add(data);
            treeSet.add(data);
        }

        //不保证有序
        System.out.println("Ordering in HashSet :" + hashSet);

        //FIFO保证安装插入顺序排序
        System.err.println("Order of element in LinkedHashSet :" + linkedHashSet);

        //内部实现排序
        System.out.println("Order of objects in TreeSet :" + treeSet);


    }
}

 

output:

Order of element in LinkedHashSet :[B, E, D, C, A]
Ordering in HashSet :[C, B, A, D, E]
Order of objects in TreeSet :[A, B, C, D, E]

  

 

posted @ 2017-11-09 13:57  戴杭林  阅读(631)  评论(0编辑  收藏  举报