我一直有一个基本的问题。 也许它太微不足道了 - 但我决定得到一个意见。
下面是示例代码:
class seventeenth{
public static void appendtolist(List<Integer> i){
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
}
public static List<Integer> returnlist(){
List<Integer> i=new LinkedList<Integer>();
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
return i;
}
public static void main(String[] args){
List<Integer> l=new LinkedList<Integer>();
appendtolist(l);//Option 1
l=returnlist();//Option 2
for(Integer e:l)
System.out.println(e);
}
}
上面哪个选项是一个很好的编程习惯,为什么?或者它真的没关系? 如果有人可以分享关于这样的基本良好编程惯例的任何文献,我将不胜感激。
答案 0 :(得分:3)
两者都很好,只要名称使功能清晰。
“追加”版本更为通用,因为它可以多次调用以附加到同一列表中。以这种方式使用“返回”版本需要将所有内容复制两次。
我可能会将“附加到”版本概括为任何Collection
:
public static void addTo(Collection<Integer> coll) {
coll.add(random.nextInt(1000));
coll.add(random.nextInt(1000));
coll.add(random.nextInt(1000));
}
答案 1 :(得分:2)
一个好的做法是尽可能多地重用对象,而不是
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
你会改用
Random rand = new Random();
i.add(rand.nextInt(1000));
i.add(rand.nextInt(1000));
使用第一种方法,您需要创建和垃圾收集两个Random对象的开销,而第二种方法只创建并垃圾收集一个Random对象。
答案 2 :(得分:0)
选项2,
public static List<Integer> returnlist(){
List<Integer> i=new LinkedList<Integer>();
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
return i;
}
我认为要好得多,除非你想继续在列表l
中添加更多元素。
答案 3 :(得分:0)
这取决于功能的含义,第一个工作是更改列表,另一个是构建一个。
我会使用方法重载来允许任何选项而不需要代码重复:
public static List<Integer> addRandom(List<Integer> i){
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
i.add(new Random().nextInt(1000));
return i;
}
public static List<Integer> addRandom() {
return addRandom(new LinkedList<Integer>());
}
public static void main(String[] args){
List<Integer> l=new LinkedList<Integer>();
addRandom(l);//Option 1
l = addRandom();//Option 2
for(Integer e:l)
System.out.println(e);
}
同样,它们没有相同的含义,但如果你真的想比较两个注释,那就是returnList强制执行List(LinkedList)和事实
答案 4 :(得分:0)
对方法名称使用驼峰大小写并使用 pascal大小写作为类名也是不错的做法。
1 GT;您的方法都是多次创建new Random()
对象。应该避免。
2 - ;数字生成不应该像1000那样硬编码。将来你可能需要2000
3 GT;在returnList方法中,您只返回LinkedList
。但是将来你可能需要它返回Vector,ArrayList。所以与代码紧密相关。它不灵活。
哪个好的
的问题
我总是更喜欢appendToList
,因为我可以传递该方法中的任何对象,如Vector,ArrayList或LinkedList。
对方法进行修改可能对良好实践有用。
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
class Seventeenth {
public static void appendToList(Random random, List<Integer> list, int[] numbers) {
for (int i : numbers) {
list.add(random.nextInt(i));
}
}
public static void main(String[] args) {
List<Integer> list = new LinkedList<Integer>();
Random random = new Random();
appendToList(random, list, new int[] { 1, 2, 3, 1000, 2000 });// Option 1
for (int e : list)
System.out.println(e);
}
}
答案 5 :(得分:0)
IMO我更喜欢returnlist
种类,因为我试图避免操纵方法的参数,因为这些更改将从代码的整个流程中“隐藏”,这可能会导致以后的意外行为。但是,由于方法名称为appendtolist
,因此很清楚将要发生的事情,因此这两种方法都适合我。
答案 6 :(得分:0)