java基础中集合是一个要点,所以我们现在温习一下这个知识点
map集合,主要是键值对的形式出现,什么意思?去吃麻辣烫的时候,你挑好的东西给了店员以后,店员会给你一个编号,这个编号是独一无二的,人们不需要过目不忘的本事,只需要根据号码就能把加工好的麻辣烫给你,方便有凭据。
map集合中有hashmap与treemap集合,这两个集合属hashmap最普遍使用。
那我们就用hashmap为例,讲一下用法
package cn.com.socket;
import java.util.HashMap;
import java.util.Map;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
Map map=new HashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("a", "A3");
System.out.print(map.size());
//2、修改集合
//3、删除集合
//4、查询集合
}
}
map.put(key,value)是往集合里面添加数据 ,但是您注意了,key是独一无二的,不能重复。
如果重复了,怎么办?会覆盖掉之前的数据;
运行这个代码,打印集合的长度,是1;
明明添加了两次数据,怎么集合的长度是1.因为两次添加的集合的key是a,被覆盖了,map集合里面的数据应该是a:A3
直接添加一个同样key,要更新的value,就可以了;
hashmap集合的key是独一无二的,如果有两个一样的key,那么后续的添加会覆盖掉之前的value
package cn.com.socket;
import java.util.HashMap;
import java.util.Map;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
Map map=new HashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("B", "A3");
map.put("c", "A4");
//2、修改集合
map.put("B", "a2");
System.out.println(map.get("B"));
//3、删除集合
//4、查询集合
}
}
运行以后,发现集合的长度不会发生变化,相同的key,最后一次添加的value会覆盖掉之前的value
package cn.com.socket;
import java.util.HashMap;
import java.util.Map;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
Map map=new HashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("B", "A3");
map.put("c", "A4");
System.out.println("集合的长度是:"+map.size());
//2、修改集合
map.put("B", "a2");
System.out.println("B对应的value值是:"+map.get("B"));
//3、删除集合
map.remove("a");
System.out.println("集合的长度是:"+map.size());
//4、查询集合
}
}
先获取key的集合,循环遍历Key集合,然后根据key获取value;
package cn.com.socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
Map map=new HashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("B", "A3");
map.put("c", "A4");
map.put("d", "F4");
map.put("e", "D4");
map.put("f", "D4");
System.out.println("集合的长度是:"+map.size());
//2、修改集合
map.put("B", "a2");
System.out.println("B对应的value值是:"+map.get("B"));
//3、删除集合
map.remove("a");
System.out.println("集合的长度是:"+map.size());
//4、查询集合
Set set=map.keySet();
for (String s : set) {
System.out.println(s+"="+map.get(s));
}
}
}
在循环遍历的方法中删除集合某个元素,只有两个办法,第一、线程集合 第二、迭代器
第一种、线程集合ConcurrentHashMap
如果使用的是hashmap的话,因为删除元素以后的map集合与map.keySet()对不上,会报错
package cn.com.socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
ConcurrentHashMap map=new ConcurrentHashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("B", "A3");
map.put("c", "A4");
map.put("d", "F4");
map.put("e", "D4");
map.put("f", "D4");
System.out.println("集合的长度是:"+map.size());
//4、查询集合如果值为D4的话,就删除
Set set=map.keySet();
for (String s : set) {
if(map.get(s).equals("D4")){
map.remove(s);
}
}
System.out.println("集合的长度是:"+map.size());
// 如果不用线程集合的话,需要用迭代器
}
}
第二种、迭代器
package cn.com.socket;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
public class Day {
public static void main(String[] args) {
/*author:jiangnan
* date:2020.09.14
*目的:循环遍历map集合,对集合进行crud
*/
HashMap map=new HashMap<>();
//1、添加集合
map.put("a", "A1,A6");
map.put("B", "A3");
map.put("c", "A4");
map.put("d", "F4");
map.put("e", "D4");
map.put("f", "D4");
System.out.println("集合的长度是:"+map.size());
//4、查询集合如果值为D4的话,就删除
Set set=map.keySet();
Iterator it=set.iterator();
while(it.hasNext()){
String key=it.next();
if(map.get(key).equals("D4")){
it.remove();
}
}
System.out.println("集合的长度是:"+map.size());
// 如果不用线程集合的话,需要用迭代器
}
}
map集合原本6个数据,有2个满足条件的,如果删除成功的话,集合长度是4;
map.keyset()是在迭代这个集合;map.remove()是在删除集合里面的元素,两个同时在修改这个集合,导致报错;
要么使用线程集合,要么在迭代的时候时候迭代器线程;