map
- java.util.Map 查找表接口
- Map体现的样子是一个多行两列的表格,其中左列称为key,右列称为value。所以也叫做键值对
- Map总是根据key来获取对应的value,所以将查询条件作为key,将查找的内容作为value保存,以便后期存取。
- 常用实现类:
- java.util.HashMap 散列表/哈希表。散列表是当今查询速度最快的数据结构,不受数据量影响查询速度。
- java.util.TreeMap 二叉树实现的Map
- V put(K k,V v)将给定的key-Value对保存到Map中
注意:Map有一个要求:Key不允许重复(equals比较),若使用Map中已存在的Key存放一个Value,则是替换Value操作,那么put方法的返回值就是被替换的Value。若给定的Key当前Map中不存在,则返回值为null
API
- V put(K key, V value);存入键值对,返回值类型是value的类型。若存入的数据key表中没有,返回null,若key已存在,则用新的value值替换原来的值,并把原来的值返回。
- V get(Object key);若表中存在key,则返回key对应的value值,不存在则返回null
- V remove(Object key);若key值存在,则移除这个键值对,若不存在返回null
- boolean containsKey(Object key);判断是否存在对应的key
- boolean containsValue(Object value);判断是否存在对应的value
- map.clear();
- map.isEmpty();
- map.size();
- map.equals();
- boolean replace(K key, V oldValue, V newValue);若key和oldValue在表中都存在并且正确,则替换value为新值,返回true,否则不做替换,返回false
- V replace(K key, V value);若key存在,替换其值为新值,返回原值,否则返回false
- Set keySet();返回一个存放所有key的Set类型集合,其泛型为key的泛型。
- Collection values();返回一个存放所有value值的Collection类型的集合,其泛型为value的泛型
- Set<Map.Entry<K, V>> entrySet();返回一个Set类型集合,它里面的元素是Entry<String,Integer>。Entry里的每个元素是一个键值对,所以它有两个泛型。
Entry常用 的方法:- K getKey();获取键值对的key
- V getValue();获取键值对的value
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("语文", 99);
map.put("数学", 98);
System.out.println(map.put("英语", 97));
System.out.println(map.put("数学", 98));
System.out.println(map.get("语文"));
System.out.println(map.remove("英语"));
System.out.println(map);
map.containsKey("yuwen");
System.out.println(map.replace("语文", 94, 97));
System.out.println(map);
Set<String> keyset = map.keySet();
System.out.println(keyset);
Collection<Integer> valueset = map.values();
Set<Entry<String,Integer>> entryset =map.entrySet();
map.clear();
map.isEmpty();
map.size();
}
Map的遍历
- Map支持三种遍历方式:
- 遍历所有的Key:Set keySet();将当前map中所有的key以一个set集合的形式返回,集合的泛型与key相同
- 遍历每一组键值对: Set<Map.Entry<K, V>> entrySet()
- 遍历所有的value(不常用) Collection values();注意方法明和返回值与前两个有所不同
//遍历所有key
Set<Character> keyset = map.keySet();
for(Character c:keyset) {
Integer value = map.get(c);
System.out.println(c+"="+value);
}
//遍历所有键值对
Set<Entry<Character ,Integer>> entryset = map.entrySet();
for(Entry<Character,Integer> entry:entryset) {
Character key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key+"="+value);
}
//遍历所有value
Collection<Integer> values = map.values();
for(Integer i:values) {
System.out.println(i);
}