开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
Map集合类型
- Map
- 特点:存储键值对映射关系,根据key能找到value
- HashMap
- 采用Hashtable哈希表存储结构
- 优点:添加速度快,查询速度快,删除速度快
- 缺点:key无序
- LinkedHashMap
- 采用哈希表存储结构,同时使用链表维护次序
- key有序(按照添加顺序)
- TreeMap
- 采用二叉树(红黑树)的存储结构
- 优点:key有序,查询速度比list快(按照内容查询)
- 缺点:查询速度没有HashMap快
Set和Map的关系:如果Map中只存储key,不存储value,就是对应的Set
Set就是对应Map的key的集合
一些命令
注意:key是唯一的,如果多次赋值,则新的值会覆盖旧值
key:无序,唯一,TreeSet
value:无序,不唯一,Collection
- 创建map对象:
Map<String,String> map=new HashMap<>();
- 使用Map对象存储键值对
map.put("cn","China");
- 使用键获取值
map.get("cn");
- 获取长度
map.size();
- 输出所有的key-value(相当于调用toString):
System.out.println(map);
- 输出所有的key (Set类型)
System.out.println(map.keySet());
- 输出所有的value (Collection)
System.out.println(map.values());
map.clear();
map.containsKey(10);
map.containsValue(new Student(id:30,name:"wangwu",age:20,score:85.0;)
map.isEmpty();
遍历Map
Map不能直接遍历,要把它转换成Set才行
- 得到所有的key组成的Set
Set<String> keySet=map.keySet(); for(String key:keySet){ System.out.println(key+"----->"+map.get(key)); }
- 得到所有的Entry(就是一个哈希表或者红黑树中节点类)组成的set集合
Set<Map.Entry<String,String>> entrySet=map.entrySet(); Iterator <Map.Entry<String,String>>it=entrySet.iterator(); while(it.hasNext()){ Map.Entry<String,String> entry=it.next(); //System.out.println(entry); System.out.println(entry.getKey()+":"+entry.getValue()); }
Iterator
Iterator专门为遍历集合而生,实际上是迭代器设计模式的实现,集合并没有提供专门的遍历方法
常用方法
boolean hasNext()
判断是否存在另一个可访问的元素Object next()
返回要访问的下一个元素void remove()
返回上次访问返回的对象
那些集合可以使用Iterator遍历
- Coolection,List,Set可以,Map不可以
- 提供iterator()方法的就可以将元素交给Iterator
- 实现Iterator解耦的集合类都可以使用迭代器遍历
for-each循环和Iterator的联系
- for-each循环(遍历集合)时,底层用的是Iterator
- 凡是可以使用for-each的肯定也能使用Iterator进行遍历
for-each循环和Iterator的区别
- for-each还能遍历数组,for-each循环和Iterator的联系只能遍历集合
- 使用for-each遍历集合时不能删除元素,会抛出异常,使用Iterator可以删除