Set集合:
Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。不能存储重复的数据,是通过每个值的哈数Code来区分值是否相同。
List和Set的区别:
Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。(索引的重新排列)
HashSet和TreeSet:
HashSet该类实现了Set接口,不允许出现重复的数据,可以存储null值,但是只能存储一个null,不保证存储时的顺序。它是非线程安全的,只能通过显式同步来对其进行并发访问。
HashSet的内部结构是一张Hash表,那HashSet是通过什么方法是来确保值的唯一呢?用的是hashCode方法和equals方法。如果值的hashCode不同,则直接添加到HashSet中,如果hashCode相同,则通过equals来判断是否一致,如果为true则为值重复,则不存储到HashSet中,为false则存储到HashSet中。如果自定义对象作为值存到HashSet中要复写hashCode和equals。
TreeSet该类实现了Set接口,可以进行一些排列操作。
网友评论