Map

Map

1.概念:

接口类,继承没有继承自Collection,存储的是<key,value>
键值对;key不可以重复

2.注意事项:

1.key是唯一,不能为空;value可以修改,key不可以修改
2.map为接口

3.api

获得键值对:Map.Entry<k,v>键值对实体
Map.Entery类
getKey()
getValue()
v setValue(value )//将键值对中的value替换成指定的value

常用方法:
V get(Object key)//根据key返回对应的value
1.key存在,返回对应的value
2.key不存在,返回null
3.key为空,抛出空指针异常

getOrDefeult(Object key,V defaultValue)//
1.key存在,value存在,返回value
2.key存在,value不存在,返回对应的默认值

v put(key,value)
1.key 存在,将源value替换成现有的value
2.key不存在,将该键值对直接插入
3.key为空,抛出异常;value可以为空

v remove(key)//删除键值对
1.key存在,删除该键值对
2.key不存在,直接返回null

Set keySet()//返回所有的key,不重复集合
Collection values()//返回所有的value集合,可重复集合

Set<Map.Entry<K,V>> entrySet()//返回键值对

containsKey()//判断是否包含key O(logN)
containsValue()//判断是否包含value O(N)
()
size()//获取键值对的个数

4.treeMap,hashMap,hashTable,LinkedHashMap的区别?

hashMap: 哈希桶 O(1) 不一定 关于key是否有序,不关心,更高的查询效率 通过哈希函数计算哈希地址

treeMap: 红黑树 O(log2N) 关于key有序 key有序 key能够比较

  • hashMap:根据key的hashCode值进行存储,访问速度快;最多允许一条记录的key为空,允许多条记录的value为null;非同步,不安全的
  • treeMap:底层二叉树树结构,根据key排序,默认升序,也可以指定排序的比较器;不允许key的值为空;非同步,不安全的
  • HashTable:与hashMap类似,key与value的值不允许为空;同步,比较慢
  • LinkedHashMap:保存记录的插入顺序,key与value均允许为空;非同步,比hashMap慢
5.map排序:

treeMap:可以改变排序排序方式,需要比较器Comparator

1.对key排序
Map<String, String> map = new TreeMap<String, String>(
new Comparator() {
public int compare(String obj1, String obj2) {
// 降序排序
return obj2.compareTo(obj1);
}
});

2.对value排序
Collections的sort(List list, Comparator<? super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较

//这里将map.entrySet()转换成list
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
//然后通过比较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}

});

hashMap排序:
参照treeMap的value排序
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
return o1.getValue().compareTo(o2.getValue());
}

});

现在假设我们根本不知道键的情况下,怎么获取键值对呢?

Map<Integer,String> map=new HashMap<Integer,String>();
map.put(42, “湖南”);
map.put(11, “北京”);
Set<Entry<Integer, String>> set=map.entrySet();
Iterator<Entry<Integer, String>> iterator=set.iterator();
while(iterator.hasNext()){
Map.Entry mapEntry=(Map.Entry)iterator.next();
System.out.println(mapEntry.getKey()+"--------"+mapEntry.getValue());
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值