HashSet:底层的数据结构是哈希表,是线程不同步的,
HashSet
是通过元素的两个方法,hashCode()和Equals()来完成,如果元素的hashCode相同,才会判断equals是否为true,如果元素的hashCode不同不会判断equals方法,所以要添加到HashSet中的元素必须重写Object的hashCode()和equals()方法。而且HashSet的Contains()和remove(Object o);依赖的也是元素的hashCode()和equals()方法
TreeSet:底层数据结构是:二叉树结构,可以对元素进行排序。
TreeSet中的元素类型的特点:往TreeSet中存储的元素,必须具备可比较性,因为具有可比较性才能排序,所以这些类型都必须实现java.lang.Compatable接口,并复写其compareTo方法,当将元素存入时Jvm会自动调用此方法来确定存入元素的位置。这种排序方式称为自然顺序(或默认顺序)。也可以根据排序的具体需要定义比较规则,此时就要定义一个比较器类,此类必须实现Java.Util.Comparatorl接口,并实实现其comapre方法,在new TreeSet时创建一个词比较器类的对象作为参数传入TreeSet的构造函数,此时TreeSet的排序就是按比较器类中第一的规则排的序。
Map中存放的是key-value对,其他的都跟Set体系的集合一样,说他们都可以通过转成Set集合来遍历
HashTable:底层是哈希表,不可以存储null的键或值,是线程同步的,效率低 jdk1.0
HashMap:底层是哈希表,可以存储null的键或值,是线程不同步的,效率高 jdk1.2
HashTable和HashMap的数据结构都是哈希表,所以他们与HashSet是一样的。,只不过他们存的是键值对
TreeMap:底层是二叉树结构的,线程不同步,可以给map中的元素按照键进行排序
TreeMap和TreeSet底层都是是二叉树结构的。所以依赖的方法是一样的,只不过TreeMap是按Key来排序的
|