Java Map - zhongjiajie/zhongjiajie.github.com GitHub Wiki
每一组映射作为一个<键,值>对保存在Map容器中.Map和List一样是一种接口.Map具有两个泛型参数,第一个是键的类型,第二个是值的类型.类型不能是原生类型,必须是引用类型.因此这里第一个类型是long的包装类Long
-
put
: 方法可以增加一个键值对 -
get
: 方法就能根据键获取到值 -
remove
: 方法可以删除键对应的元素 -
putAll
: map1.putAll(map2)将map2中的全部 key-value put到map1中 -
getOrDefault
:map.(key, defaultValues)
如果可以存在就返回对应的value,如果key不存在就返回设置的默认值,oracle javase map getOrDefault
HashMap
: 实现了Map
接口,底层用Hash算法存储数据,储存的是键值对的结构.声明一般方法是Map<String, String> testMap = new HashMap<String, String>();
,常用方法是put get remove keySet values
LinkedHashMap
: 实现了Map
接口,会按照元素插入的顺序进行排序,大部分情况下都会比TreeMap
快.但是有几个点需要注意的:
- It contains only unique elements.
- A LinkedHashMap contains values based on the key
- It may have one null key and multiple null values
- It is same as HashMap instead maintains insertion order
- Since it doesn't have to keep the elements sorted, LinkedHashMap should be faster for most cases; TreeMap has
O(log n)
performance for containsKey, get, put, and remove, according to the Javadocs, while LinkedHashMap isO(1)
for each.
TreeMap也能实现按照键值对插入的顺序排序,是通过Comparator以及natural Comparable
的内在关系来维持元素的排序的
如何声明静态的Map类型How can I initialise a static Map:需要使用常量时候很有用
public class Test {
private static final Map<Integer, String> myMap;
static {
Map<Integer, String> aMap = ....;
aMap.put(1, "one");
aMap.put(2, "two");
myMap = Collections.unmodifiableMap(aMap);
}
}
从旧map中复制值生成一个新的mapmyobjectListB = new HashMap<Integer,myObject>(myobjectListA);