Map和Set是一种专门用来搜索的数据结构
搜索的数据称为关键字(Key)和其关键字对应的值(Value),而Key-Value则称为键值对
Map中储存的是key-value键值对,而Set中只存储了Key
Map
- Map其中存储的是<K,V>键值对,并且Key一定唯一的,不得有重复值,而Value是可以重复的,若进行存储的时候Key值发生了重复,则该Key值所对应的Value值会被替换成新的Value
- Map是一个接口类,不能直接实例化对象,只能实例化其实现类TreeMap或HashMap如
Map<Integer,Integer> map1 = new TreeMap<>(); //实例化TreeMap Map<Integer,Integer> map2 = new HashMap<>(); //实例化HashMap
- Map中的Value可以修改,如果要修改Key,只能先将该键值对删除掉,再重新插入
- Map中的Key可以分离出来,存储到Set中(因为Key不能重复)
- Map中的Value可以分离出来,存储到Collection的子集合中(Value可能有重复)
- Map的常用方法
方法 V get(Object key) 返回key对应的value V getOrDefault(Object key, V defaultValue) 返回 key 对应的 value,若key 不存在,返回默认值 V put(K key, V value) 设置 key 对应的 value V remove(Object key) 删除 key 对应的映射关系 Set<K> keySet() 返回所有 key 的不重复集合 Collection<V> values() 返回所有 value 的可重复集合 Set<Map.Entry<K, V>> entrySet() 返回所有的 key-value 映射关系 boolean containsKey(Object key) 判断是否包含 key boolean containsValue(Object value) 判断是否包含 value -
TreeMap和HashMap的区别
Map底层结构 TreeMap HashMap 底层结构 红黑树 哈希桶
查询时间复杂度 O(log2N) O(1) 是否有序 关于Key有序 无序 线程安全 不安全 不安全 查找区别 需要进行元素比较 通过哈希函数计算哈希地址 比较与重写 key必须能够比较,否则会抛出
ClassCastException异常自定义类型需要覆写equals和
hashCode方法应用场景 需要Key有序场景下 Key是否有序不关心,追求时间性能
Set
- Set是继承自Collection的一个接口类
- Set中只存储了Key,且Key是唯一的
- Set中不能插入null的Key
- TreeSet和HashSet性质与Map相似
- Set常用方法
方法 解释 boolean add(E e) 添加元素,但重复元素不会被添加成功 void clear() 清空集合 boolean contains(Object o) 判断 o 是否在集合中 Iterator<E> iterator() 返回迭代器 boolean remove(Object o) 删除集合中的 o int size() 返回set中元素的个数 boolean isEmpty() 检测set是否为空,空返回true,否则返回false Object[] toArray() 将set中的元素转换为数组返回 boolean containsAll(Collection<?> c) 集合c中的元素是否在set中全部存在,是返回true,否则返回false boolean addAll(Collection<? extends E> c) 将集合c中的元素添加到set中,可以达到去重的效果