Treemap,HashMap常用方法

HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,要求key必须重写equals和hashcode方法。

TreeMap:基于红黑二叉树实现,线程非安全,不允许null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,默认升序,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出。

上面的是基本区别,想要深入研究的话起码要个上万字,没必要细看,用的时候根据需求选择就行,这里主要说一下两个类的特有方法。

HashMap:

注意: 一般初始化形式是HashMap<String, Integer>,里边的String就是Key(K),里边的Integer就是Value(V)

下面基本都是实例方法,静态方法前边会加static

1.  存入键值对

 V   put ( K key, V value ) 

这里的返回值很神奇,向map中添加键值对后,返回这个key对应以前的value,如果以前没有则返回null

V  putIfAbsent (K key, V value)

这个就有点意思了,他在输入键值对前,会先判断map中是否有相同key,如果有就不覆盖,返回原有的value,如果没有就返回null,并直接存入。

举个例子

hashMap.putIfAbsent("A",16);    hashMap.putIfAbsent("A",17);

hashMap.putIfAbsent("B", 100);    hashMap.putIfAbsent("B", 150);

hashMap.put("C", 222);    hashMap.put("C", 23);

输出:A=16, B=100, C=23

void  putAll ( Map<? extends K,? extends V> m) 

很简单,就是把一个其他map复制过来

2.   通过键取值   

V get(K key)

很简单,如果map有key则获取value,没有则返回null,也有可能有key但对应的value就是null,所以不能用get判断是否存在某个key。

V getOrDefault(K key, V defaultValue)

和上边差不多,如果map有key则获取value,没有则返回自定义的defaultValue

3.  键或值是否存在

boolean containsValue(Object value)

boolean containsKey(Object key)

4.     替换键值对

V replace(K key, V Value)

如果map中存在key则将其对应的value替换为参数里的value,并返回以前的value,如果不存在key则返回null。

boolean replace(K key, V oldValue, V newValue)

匹配map中对应的键值对,如果完全符合就替换,不符合就返回false。

void replaceAll(BiFunction function)

对所有键值对进行替换,函数式编程以后会另开文章讲解

5.   删除键值对

V remove(K key)

通过key删除键值对,返回key对应的value,如果不存在key返回null

boolean remove(K key, V Value)

只有完全匹配参数中的键值对才删除。

6.    元素数据处理(函数式编程)

V  computeIfPresent(K key, BiFunctionsuper K, ? super V, ? extends V> remappingFunction)

V  computeIfAbsent (K key,    Functionsuper K, ? extends V> mappingFunction)

V  compute (K key,  BiFunctionsuper K, ? super V, ? extends V> remappingFunction)

V   merge(K key, V value,BiFunction remappingFunction)

//上面这些功能简单来说就是  用自定义方法更新key对应的value。

void   forEach ( BiConsumer action)

//这个更好理解了,就是对map所有键值对进行操作

7.  获取  键/值  的集合

Collection<V>  values()

获取map中的所有value,并存入Collection 

Set<K>  keySet()

获取map中的所有key,存入set

Set<Map.Entry<K,V>> entrySet()

获取map中所有键值对,存入set,注意这里的返回类型是个map特有的接口Map.Entry的set集合,一个Map.Entry接口对应map中的一个键值对,Map.Entry是个静态接口,可以通过foreach或迭代器,调用每个接口的set/get方法,其实Map.Entry可以看作键值对的实体类

 

TreeMap:

注意:treemap的方法是在hashmap的基础上进行补充的,下面介绍的是treemap里的特有方法,至于基础方法和hashmap一模一样,只是没有compute和merge。

 

1. 查找限定范围内的  一个   key或entry

注意:之所以会有这些方法,是因为treemap是有序的。

Map.Entry<K,V> ceilingEntry(K key)

K   ceilingKey(K key)

//查找大于等于参数key的map里包含的最小key或entry,没有就返回null

Map.Entry<K,V> floorEntry(K key)

K   floorKey(K key)

//查找小于等于参数key的map里包含的最大key或entry,没有就返回null

Map.Entry<K,V> lowerEntry(K key)

K   lowerKey(K key)

//查找小于参数key的map里包含的最大key或entry,没有就返回null

Map.Entry<K,V> higherEntry(K key)

K   higherKey(K key)

//查找大于参数key的map里包含的最小key或entry,没有就返回null

Map.Entry<K,V> firstEntry(K key)

K   firstKey(K key)

//查找map中最小的键(第一个)

Map.Entry<K,V> lastEntry(K key)

K   lastKey(K key)

//查找map中最大的键(最后一个)

2  .获取treemap 的子集或 变种

NavigableMap<K,V>  headMap(K toKey, boolean inclusive)

// 从>=min开始到<?tokey,截取这一范围的子map,如果inclusive=false,就是<tokey,如果inclusive=true,就是<=tokey,我们也可以不选择inclusive这个参数,它默认false。

NavigableMap<K,V>  tailMap(K fromKey, boolean inclusive)

// 从>?formkey开始到<=max,截取这一范围的子map,如果inclusive=false,就是>tokey,如果inclusive=true,就是>=tokey,我们也可以不选择inclusive这个参数,它默认false。

NavigableMap<K,V>  subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) 

// 从>?formkey开始到<?tokey,截取这一范围的子map,如果inclusive=false,就是>/<,如果inclusive=true,就是>=/<=,我们也可以不选择inclusive这个参数,它默认false。

NavigableSet<K> descendingKeySet()   

NavigableMap<K,V> descendingMap()  

// 返回   反序   的key集合或map

3.  删除最大或最小键值对

Map.Entry<K,V> pollFirstEntry()  

Map.Entry<K,V> pollLastEntry()    //返回被删除的键值对

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值