Map 集合
Map 已实现类与特性:
- Hashtable:哈希表结构,且不允许 null 作为键和值,同步(不建议使用),键唯一性靠 hashCode()和 equals()(在键对象的类中重写方法,可保证键唯一性)
- Properties(Hashtable 子类):属性集,**键与值都是字符串**(没有泛型),都以 object 存储在其中(自身提供了不用强转的方法),且可以结合 流 进行键值操作
- HashMap: :哈希表结构,且允许null 作为键和值,不同步
- LinkedHashMap:HashMap 的子类,元素顺序为存入顺序(有序)
- TreeMap:二叉树结构,会对元素根据键排序(排序方法参照 TreeSet),不同步
Map 常用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Map map = new HashMap(); map.clear(); map.size(); map.containsKey("obj"); map.containsValue("obj"); map.isEmpty();
map.get("key"); map.put("key", "value");
map.put("key", "value2"); map.putAll(map); map.remove("key"); map.remove("key", "value");
|
迭代 Map 集合的 3 种方法:
map.keySet()
获取所有键:
它返回一个 set 集合,元素都是 map 集合的 key。
1 2 3 4 5 6 7 8 9
| HashMap<Integer,String> map=new HashMap<>(); map.put(1,"obj2"); map.put(2,"obj3"); map.put(0,"obj1");
Set<Integer> set=map.keySet(); for (Integer i:set) { System.out.println(map.get(i)); }
|
map.values()
获取所有值
它返回 Collection 集合,元素都是 map 的 value。
1 2 3 4 5 6 7 8 9
| HashMap<Integer,String> map=new HashMap<>(); map.put(1,"obj2"); map.put(2,"obj3"); map.put(0,"obj1");
Collection<String> col=map.values(); for (String vs:col) { System.out.println(vs); }
|
map.entrySet()
对象方式取出
它返回 Set<Map.Entry<k,v>>
Entry是Map的内部接口,每一个Entry对象存储了map的一对键值对。通过Entry中的 getKey
getValue
setValue
等方法,对map进行 key,value的获取和value的修改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| HashMap<Integer,String> map=new HashMap<>(); map.put(1,"obj2"); map.put(2,"obj3"); map.put(0,"obj1");
Set<Map.Entry<Integer,String>> entry=map.entrySet(); for (Map.Entry<Integer,String> e:entry) { System.out.println("key="+e.getKey() +",value="+e.getValue()); if (e.getKey()==1){ e.setValue("obj"); } } System.out.println(map);
|