其实TreeMap也有这个问题,只是TreeMap的键key一般都是字符串或者整型,而字符串和整型对象内部已经实现了Comparable接口,所以问题不大(因为用自定义对象做键key的毕竟还是少数)
LinkedHashSetLinkedHashSet拥有HashSet的大部分优点,且保证了插入的顺序,使得在查询的时候,可以按照插入的顺序依次读取(原理是链表)
这里要注意一点:在Java程序语言设计中,所有的链表都是双向链表,即每个节点还存放着一个指向前节点的引用
大致的结构图如下所示(之前的LinkedHashMap忘记贴图了,跟这个类似,只是元素内容不同):
三者的排序比较参考上一篇映射Map,Set排序比较表现出来的行为与Map一致
总结Set一般用到的有HashSet,TreeSet,LinkedHashSet,内部都是无重复元素
HashSet的插入和访问都很快,但是内部是无序排列
TreeSet的插入和访问都很慢,但是内部是有序排列,默认按升序排列
LinkedHashSet拥有HashSet的大部分优点,而且还可以按照元素插入的顺序来访问元素,但是性能会比HashSet差
后记最后,感谢大家的观看,谢谢