本文共 6374 字,大约阅读时间需要 21 分钟。
Map 接口定义了双例集合的存储特征,它并不是 Collection 接口的子接口。双例集合的存储特征是以 key 与 value 结构为单位进行存储。
Map 与 Collecton 的区别:方法 | 说明 |
---|---|
V put (K key,V value) | 把 key 与 value 添加到 Map 集合中 |
void putAll(Map m) | 从指定 Map 中将所有映射关系复制到此 Map 中 |
V remove (Object key) | 删除 key 对应的 value |
V get(Object key) | 根据指定的 key,获取对应的 value |
boolean containsKey(Object key) | 判断容器中是否包含指定的 key |
boolean containsValue(Object value) | 判断容器中是否包含指定的 value |
Set keySet() | 获取 Map 集合中所有的 key,存储到 Set 集合中 |
Set<Map.Entry<K,V>> entrySet() | 返回一个 Set 基于 Map.Entry 类型包含 Map 中所 |
有映射 | |
void clear() | 删除 Map 中所有的映射 |
HashMap 是 Map 接口的接口实现类,它采用哈希算法实现,是 Map 接口最常用的实现类。 由于底层采用了哈希表存储数据,所以要求键不能重复,如果发生重复,新的值会替换旧的值。 HashMap 在查找、删除、修改方面都有非常高的效率。
import java.util.HashMap;import java.util.Map;import java.util.Set;public class HashMapTest01 { public static void main(String[] args) { //实例化HashMap容器 Mapmap = new HashMap<>(); //添加元素 map.put("username", "张三"); map.put("age", "18"); map.put("sex", "男"); String value = map.put("username", "李四"); System.out.println(value); //张三 返回被覆盖的value System.out.println(map); //{sex=男, age=18, username=李四} //获取元素 String val = map.get("username"); System.out.println(val); //李四 //获取HashMap中所以的元素,可以使用 keySet 方法与 get 方法一并完成 Set keys = map.keySet(); for (String key: keys){ String val2 = map.get(key); System.out.println(key + "----" + val2); } //通过entrySet方法获取Map.Entry类型获取元素 Set > entrySet = map.entrySet(); for (Map.Entry entry: entrySet){ String key = entry.getKey(); String val3 = entry.getValue(); System.out.println(key + "----" + val3); } //删除元素 String val4 = map.remove("age"); //返回被删除元素的value //判断key或value是否存在 boolean flag1 = map.containsKey("username"); boolean flag2 = map.containsValue("20"); ----------------------------------------------------------------- //实例化HashMap容器 Map map = new HashMap<>(); map.put("username", "张三"); map.put("age", "18"); map.put("sex", "男"); Map map2 = new HashMap<>(); map2.put("id", "1001"); map2.put("age", "20"); //Map容器的并集操作 map.putAll(map2); Set keys = map.keySet(); for (String key: keys){ System.out.println(key+"====" + map.get(key)); } }}
TreeMap 和 HashMap 同样实现了 Map 接口,所以,对于 API 的用法来说是没有区别的。HashMap 效率高于 TreeMap;TreeMap 是可以对键进行排序的一种容器,在需要对键排序时可选用 TreeMap。TreeMap 底层是基于红黑树实现的。
在使用 TreeMap 时需要给定排序规则(同TreeSet):Collection接口继承了Iterable接口,在该接口中包含一个名为iterator的抽象方法,所有实现了Collection接口的容器类对该方法做了具体实现。iterator方法会返回一个Iterator接口类型的迭代器对象,在该对象中包含了三个方法用于实现对单例容器的迭代处理。
Iterator对象的工作原理: Iterator接口定义了如下方法:import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorListTest { public static void main(String[] args) { //实例化容器 Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); //获取元素 //方式一:在迭代器中,通过while循环获取元素 //获取迭代器对象 Iterator iterator = list.iterator(); while (iterator.hasNext()){ String value = iterator.next(); System.out.println(value); } System.out.println("--------------------------------"); //方法二:在迭代器中,通过for循环获取元素 for (Iterator it = list.iterator();it.hasNext();){ String value = it.next(); System.out.println(value); } }}
import java.util.HashSet;import java.util.Iterator;import java.util.Set;public class IteratorSetTest { public static void main(String[] args) { Setset = new HashSet<>(); set.add("a"); set.add("b"); set.add("c"); //获取元素 //方式一:通过 while 循环 Iterator iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } System.out.println("-----------------------"); //方式二:通过 for 循环 for (Iterator it = set.iterator();it.hasNext();){ System.out.println(it.next()); } }}
import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class IteratorRemoveTest { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); Iterator iterator = list.iterator(); while(iterator.hasNext()){ //不要在一次循环中多次调用next方法 String value = iterator.next(); if (value.equals("c")){ iterator.remove(); } } //等价于 //list.removeIf(value -> value.equals("c")); }}
Collections 是一个工具类,它提供了对 Set、List、Map 进行排序、填充、查找元素的辅助方法。该类中所有的方法都为静态方法。
常用方法:import java.util.*;public class CollectionTest01 { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("c"); list.add("b"); list.add("d"); list.add("a"); //通过 Collections 工具类中的 sort 方法完成排序 Collections.sort(list); for(String str:list){ System.out.println(str); } }}
Listlist2 = new ArrayList<>();list2.add("a");list2.add("b");list2.add("c");list2.add("d");//洗牌处理Collections.shuffle(list2);for(String str:list2){ System.out.println(str);}
转载地址:http://jqpli.baihongyu.com/