Set和Map都会作为进行搜索的容器或者数据结构
Map:
1.键值对,键不可重复,值可以重复
HashMap:可以存储一个为null的键,值也可以为null
Map并没有继承自Collection接口
Map是一个接口类,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复
Map接口下有两个普通子类,HashMap和TreeMap,其中,HashMap就是我们通常所说的哈希表
Set:
无序,存取顺序不一致,不重复,无索引
所以不能使用普遍for 循环遍历,也不能通过索引获取元素
HashSet:(HashSet集合底层采取哈希表存储的数据)
1.元素是无序的,HashSet是一个没有重复元素的集合,不保证集合的迭代顺序,所以随着时间元素的顺序可能会改变
2.允许空值,不是线程安全的?
3.HashSet基于HashMap实现,HashMap中输入一个键值对,而在HashSet中只输入一个值
4.添加使用add(),但是HashSet不会存重复的元素,所以add相同的不会存进去
5.哈希值:是JDK根据对象的地址,按照某种规则算出来的int类型的数值,同一个对象多次调用hashCode()方法返回的哈希值是相同的。一般,不同对象的哈希值是不同的。
TreeSet:(不重复,无索引,可排序)
1.对于数值类型:Integer , Double,官方默认按照大小进行升序排序
2.对于字符串类型:默认按照首字符的编号升序排序
3.对于自定义类型如Student对象,TreeSet无法直接排序
TreeSet集合存储对象的的时候有2种方式可以设计自定义比较规则:
1.让自定义的类实现Comparable接口重写里面的compareTo方法来定制比较规则
2.TreeSet集合有参数构造器,可以设置Comparator接口对应的比较器对象,来定制比较规则