老师,一个小问题请教一下
来源:17-1 课程总结
![](http://img1.sycdn.imooc.com/user/5458508600019e2602200220-100-100.jpg)
慕虎8548721
2018-07-31
这边有个课外的问题想请教你一下,直接拿代码来说吧
这一个类是对集合的操作类,里面声明了两个集合,然后在A类中调用add方法给集合中存储数据,然后在B类中调用get去拿集合中的数据,这样的话是存在错误的,因为A存储了数据,但是对应的value只是一个指向,所以我觉得应该将集合里面的集合也放在类变量中,但是这样依然出现了错误,请老师帮解答一下,
我这边的需求是A是总的人员表进行保存操作,B是进行特种作业的人员进行保存操作,在特种作业人员保存的时候,要是这个人没有在总的人员列表中就不能保存,这边没办法用缓存,所以还请老师给予帮助,以您的经验给出一个解决办法,不胜感激
package com.cn.imooc.student;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Operate {
private static Map<String, ArrayList<Student>> map = Collections.synchronizedMap(new HashMap<String, ArrayList<Student>>());
private static ArrayList<Student> list = new ArrayList<Student>();
private Operate(){};
private static Operate operate = new Operate();
public static Operate getInstance(){
return operate;
}
public void add(){
Student student = new Student();
student.setId("1");
student.setName("张三");
Student student2 = new Student();
student2.setId("2");
student2.setName("李四");
list.add(student);
list.add(student2);
map.put("123", list);
map.put("1232", list);
}
public void get (){
System.out.println(map.keySet().size());
if (map.keySet().size()==0) {
System.out.println("没有了");
}else{
for (Student student : map.get(123)) {
System.out.println(student.toString());
}
}
}
}
1回答
-
Jimin
2018-08-01
你好,你这代码我倒是看明白了,但是没太懂和你介绍里A和B以及不能缓存的关系,以及能否保存的关系。你qq上给我留言吧,细说一下场景,不过我qq上不一定第一时间能看到,最近工作偏忙一些(今天也是后半夜到家,来处理你的问题)。
当前这个代码看起来确实很容易出问题,声明的全局变量list有线程不安全问题(需要使用线程安全的集合才可以)、map设计的又过于复杂(guava里的Multimap会简单很多,课程里有介绍,但也要注意线程安全问题)。具体我们qq上细聊吧,感觉那样更容易帮你解决现在的问题。
00
相似问题