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]
    学会勇敢
                    
                
                
            
        
浙公网安备 33010602011771号