Set接口 Set集合无序、不可重复
实现类:
HashSet:底层数据结构哈希表
TreeSet:底层数据结构二叉树,可以对集合进行排序
当我们需要对TreeSet集合中的元素不具备比较功能,或是比较功能不适合时,需要让集 合自身有比较性。这时就需要自定义一个比较器。
解决方案:
1)集合元素自身具备比较性,集合元素类实现Comparable接口,compareTo方法,提供自然排序方法
2)集合具备比较性。比较器,实现Comparator接口,compare方法。
当有比较器的时候,以比较器为主
记忆:Comparable接口的obj1.compareTo(obj2)和元素比较,自然排序用
Comparator接口的compare(obj1,obj2)比较器,顾名思义要传两个对象
如何确定元素的唯一性?
HashSet依赖的是元素的hashCode()和equals()方法,:
1)首先判断元素哈希值
2)哈希值不同,不需要再判断元素的equals()方法,返回false
3)哈希值相同,判断equals()方法。如果equals()方法相同返回true,视为同一个元素;不同返回false,视为不同的元素,会存储在同一个哈希值上
4)所以我们要重写hashCode()和equals()方法,hashCode()用来判断集合元素对象,而equals()用来判断元素对象的属性值是否相同
TreeSet根据比较方法返回值,负数,放左边,整数放右边,零就代表重复
双序列集合Map
1)一次存一对元素,以键值对的形式<k,v>
2)Map集合中的键必须确定唯一性
取出集合元素两种方法:
1)通过keySet()取出集合所有的键,对应Set集合,遍历Set集合取出key对应的value
2)通过entrySet()取出键值映射的关系,对应Set集合,遍历Set集合,取得键和值
这种取法,可以把一组键值看成是一个封装的对象^_^(个人理解)
Hashtable:底层哈希表,同步,线程安全,不允许null作为键
Properties,多用于配置文件的定义和操作,键值之间通过=,都是字符串
HashMap:底层哈希表,不同步,线程不安全,运行null作为键,null作为值
LinkedHashMap:有序,存入和取出的顺序一致
TreeMap:可以对集合的键进行排序 |