Set集合:元素是无序的(因为没有索引),元素不可以重复。可以有null元素。
|---HashSet(JDK1.2)
数据结构:底层数据结构是哈希表。
特点:存取速度快、元素唯一。
线程:线程不同步。
保证性元素唯一的原理:是通过元素的两个方法,hashCode()和equals()来完成。如果元素的hashCode值相同,才会判断equals是否为true。如果元素的hashCode值不同,不会调用equals。ArrayList判断元素是否相同只依赖于equals,Set判断元素是否相同依赖于hashCode和equals。写集合时要覆写hashCode\equals方法。
|---TreeSet
数据结构:底层数据结构式二叉树。
特点:元素有序、可以对Set集合中的元素进行排序。
线程:线程不同步。
保证性元素唯一的原理:排序时,当主要条件相同时,一定要判断一下次要条件。当两种排序都存在时,以第二种方式比较器为准。
TreeSet排序的第一种方式:元素本身需要实现Comparable接口,覆盖compareTo方法。让元素自身具备比较性,比如八种基本数据类型或则字符串,实现Compareble接口,覆盖compareTo方法,这种方式也称为元素的自然顺序或者叫默认顺序。
TreeSet排序的第二种方式:另外定义一个类,实现Comparator接口,覆盖compare方法。当元素自身不具备比较性(比如存储学生对象时)或者具备的比较性不是我们所需要的比较性时(比如想字符串的长度排序),此时就需要让集合自身具备自定义的比较性。那如何让集合自身具备比较性呢?可在集合初始化时,就让集合具备比较方式。即定义一个类,实现Comparator接口,覆盖compare方法。
Map集合:该集合存储的是键值对,而且键是唯一的,Map和Set很像,Set集合底层就是使用了Map集合。Map集合没有迭代器,要取出元素必须先将Map集合转换成Set集合才能遍历元素。Map和Set很像,其实Set底层就是使用了Map集合。
|---HashTable(JDK1.0):底层是哈希表数据结构;
不可以使用null键和null值;
用作键的对象必须实现hashCode和equals方法来保证键的唯一性
线程同步,效率低。
|---HashMap(JDK1.2)底层是哈希表数据结构;
允许使用null键和null值;线程不同步,效率高;除了这2点相同外,其余HashMap和HashMap差不多。
保证元素唯一性的原理:先判断元素的hashCode值是否相同,再判断两元素的equals方法是否为true。往HashSet里面存的自定义元素要覆写写hashCode和equals方法,以保证元素的唯一性!
|---TreeMap(JDK1.0)底层是二叉树结构;
允许使用null键和null值;
线程不同步;
可以给Map集合中的键进行排序。
TreeMap排序的第一种方式:让元素自身具备比较性,比如八种基本数据类型或则字符串,实现Compareble接口,覆盖compareTo方法,此方式是元素的自然顺序。
TreeMap排序的第二种方式:当元素自身不具备比较性(比如存储学生对象时)或者具备的比较性不是我们所需要的比较性时(比如想字符串的长度排序),此时就需要让集合自身具备自定义的比较性。那如何让集合自身具备比较性呢?可在集合初始化时,就让集合具备比较方式。即定义一个类,实现Comparator接口,覆盖compare方法。
Map扩展映射关系可以为:一对多、集合的嵌套。