算法竞赛中的常用JAVA API :HashMap 和 TreeMap
摘要
本文主要介绍Map接口下的HashMap和TreeMap。
HashMap
HashMap是基于哈希表的 Map 接口的实现,是无序的
- clear()//清空。
- containsKey(Object key)//如果包含指定键,返回true
- containsValue(Object value)//如果包含指定值, 返回true
- get(Object key)//返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
- isEmpty()//如果此映射不包含键-值映射关系,则返回 true
- put(K key, V value)//在此映射中关联指定值与指定键。
- remove(Object key)//从此映射中移除指定键的映射关系(如果存在)。
- size()返回此映射中的键-值映射关系数。
实例
HashMap<Integer, Integer> m = new HashMap<>();//定义格式
m.put(100,1);
System.out.print(m.get(100)); // 1
TreeMap
TreeMap是基于红黑树实现的,是有序的, 可进行排序。
此实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销
- clear()//清空
- containsKey(Object key)//如果包含指定键,返回true
- containsValue(Object value)//如果包含指定值, 返回true
- get(Object key)//返回指定键的值, 如果不存在返回null
- firstKey()//返回此映射中当前第一个(最低)键。
- lastKey()返回映射中当前最后一个(最高)键
- ceilingKey(K key)返回大于等于给定键的最小键;如果不存在这样的键,则返回 null。
- floorKey(K key)返回小于等于给定键的最大键;如果不存在这样的键,则返回 null。
HashMap和TreeMap的遍历方式
HashMap和TreeMap可以根据迭代器遍历,但,它俩不能直接遍历,
可以遍历键的集合, 值的集合, 键值对的集合。
-
通过keySet()获得键,然后根据键遍历
使用while + Iterator
TreeMap<Integer, String> m = new TreeMap<>();
m.put(1,"A");
m.put(2,"B");
Set<Integer> s = m.keySet();
Iterator it = s.iterator();
Integer key = null; // 这里必须必须声明为类。
while(it.hasNext()){
key = (Integer)it.next();
String value = m.get(key);
System.out.print(value);
}
使用增强for
TreeMap<Integer, String> m = new TreeMap<>();
m.put(1,"A");
m.put(2,"B");
for(int k : m.keySet()){
System.out.print(m.get(k));
}
- 直接通过values()遍历值
使用while 和 Iterator
TreeMap<Integer, String> m = new TreeMap<>();
m.put(1,"A");
m.put(2,"B");
Collection<String> s = m.values();
Iterator it = s.iterator();
String value = null; // 这里必须必须声明为类。
while(it.hasNext()){
value = (String)it.next();
System.out.print(value);
}
使用增强for
使用增强for
TreeMap<Integer, String> m = new TreeMap<>();
m.put(1,"A");
m.put(2,"B");
for(String value : m.values()){
System.out.print(value);
}
增强for还是十分方便滴
增强for还是十分方便滴