天天看点

Java基础Map和Set

有哪些Map的实现? HashMap 、 Hashtable 、 LinkedHashMap 、 TreeMap 、 ConcurrentHashMap HashMap和Hashtable 的区别? HashMap :底层是基于数组 + 链表, ⾮线程安全的 ,默认容量是 16 、允许有空的健和值。 Hashtable :基于哈希表实现, 线程安全 的 ( 加了 synchronized) ,默认容量是 11 ,不允许有 null 的健和值。 HashMap和TreeMap应该怎么选择?使⽤场景 hashMap: 散列桶 ( 数组 + 链表 ) ,可以实现快速的存储和检索,但是确实包含⽆序的元素,适⽤于在 map中插⼊删除和定位元素 treeMap: 使⽤存储结构是⼀个平衡⼆叉树中的 红⿊树,可以⾃定义排序规则,要实现 Comparator 接 ⼝。 能便捷的实现内部元素的各种排序,但是⼀般性能⽐ HashMap 差,适⽤于安装⾃然排序或者⾃定义排序规则 (写过微信⽀付签名⼯具类就⽤这个类 )。 Set和Map的关系 核⼼就是不保存重复的元素,存储⼀组唯⼀的对象 set 的每⼀种实现都是对应 Map ⾥⾯的⼀种封装, new HashSet()对象底层对应的就是new  HashMap() ,new T reeSet()底层 对应的就是new T reeMap()。

set是一种关联式容器,其特性如下:

  • set以RBTree作为底层容器
  • 所得元素的只有key没有value,value就是key
  • 不允许出现键值重复
  • 所有的元素都会被自动排序
  • 不能通过迭代器来改变set的值,因为set的值就是键

map和set一样是关联式容器,它们的底层容器都是红黑树,区别就在于map的值不作为键,键和值是分开的。它的特性如下:

  • map以RBTree作为底层容器
  • 所有元素都是键+值存在
  • 不允许键重复
  • 所有元素是通过键进行自动排序的
  • map的键是不能修改的,但是其键对应的值是可以修改的

常⻅Map的排序规则是怎样的? 按照添加顺序使⽤ LinkedHashMap ,按照⾃然排序使⽤ TreeMap ,⾃定义排序 TreeMap(Comparetor c)