有这样两段代码:
第一类
private Map<Integer, ArrayList<Question>> questions = new HashMap<Integer,ArrayList<Question>>();
public ArrayList<Question> getQuestions(int level) {
return new ArrayList<Question>(questions.get(level));
}第二类
private Map<Integer, ArrayList<Question>> questions = new HashMap<Integer,ArrayList<Question>>();
public ArrayList<Question> getQuestions(int level) {
return questions.get(level);
}
请问是像第一类那样,返回时,通过原来的集合,new一个新的ArrayList好呢?
还是像第二类那样,直接返回原来的集合好呢?貌似比较多的情况是用第一种,请问这么做相比第二种,好处是什么呢?
第一类
private Map<Integer, ArrayList<Question>> questions = new HashMap<Integer,ArrayList<Question>>();
public ArrayList<Question> getQuestions(int level) {
return new ArrayList<Question>(questions.get(level));
}第二类
private Map<Integer, ArrayList<Question>> questions = new HashMap<Integer,ArrayList<Question>>();
public ArrayList<Question> getQuestions(int level) {
return questions.get(level);
}
请问是像第一类那样,返回时,通过原来的集合,new一个新的ArrayList好呢?
还是像第二类那样,直接返回原来的集合好呢?貌似比较多的情况是用第一种,请问这么做相比第二种,好处是什么呢?
三楼说的很明显了
跟你的代码的业务有关联,
如果后续代码对这个list只有读操作,那么第二种方案好
如果后续代码对这个list进行了增删改操作,那么就要根据业务逻辑来决定了
如果方法是private,就直接返回,因为你对代码有完全的控制权如果方法是public,就封一层再返回,因为你不知道别人会如何使用你的返回值
2.是否通过这个返回值保持其它模块与你的数据同步如果1,2都不满足,那么返回一个新的List.......对应第一类
如果1,2都满足,那么直接返回List............对应第二类
如果需要数据同步,又不希望其它模块修改........对应第三类
private Map<Integer, ArrayList<Question>> questions = new HashMap<Integer,ArrayList<Question>>();
public List<Question> getQuestions(int level) {
return Collections.unmodifiableList(questions.get(level));
}
说到底,还是要看具体的设计需求。
如果考虑到多线程的话,就更复杂了