2017-04-11 56 views
-6

我一直在学习Java过去的这个星期,然后复制我用这3种方式的ArrayList时:这3种复制ArrayList的方式是否可以接受?

// arrayListSource is an ArrayList with some ints. 

// First way: 
ArrayList<Integer> copyOne = new ArrayList<>(); 
copyOne.addAll(arrayListOne); 

// Second way: 
ArrayList<Integer> copyTwo = new ArrayList<>(arrayListSource.subList(0, arrayListSource.size())); 

// Third way: 
ArrayList<Integer> copyThree = new ArrayList<>(arrayListSource); 

是这3种方式复制的ArrayList的一种可接受的方式?如果是这样,是否有理由专门使用一种方式? (除了可读性之外的一个原因)。 谢谢。

+4

是的,他们很好。通常你会选择第三种方法。此外,它拼写'ArrayList'。 –

+4

只是旁注,*使用泛型*。 –

+0

那么问题是什么?我不认为问“这些方法可行吗?”是不明智的问题。您可能会问“这些方式之间有什么区别”,“为什么我在使用方法XXX时出现balblablabala问题”等。 –

回答

0

是,所有3个都是精品,虽然对于目的可读性并在评论中指出的@Adrian,为更好的性能,使用第三个。此外,请使用泛型的是这样的:

ArrayList<Integer> copyThree = new ArrayList<>(arrayListSource); 
+1

不仅为了可读性,而且在性能方面,方法3将是最好的。 –

+0

@AdrianShum感谢您的建议。编辑答案反映这 –

+0

@AdrianShum你有基准吗? – ZhekaKozlov

1

您可以使用其中一个,但作为@雅各布-G说,通常你需要使用第三个原因是更具有可读性。并且记得编码到接口,所以你需要使用List作为ArrayList的接口。事情是这样的:

List<?> copyThree = new ArrayList<>(arrayListSource); 

所以每当你想从ArrayList中 LinkedList的改变到另一个List实现像,你并不需要改变的ArrayList到LinkedList的无处不在。

你可以阅读关于列表与ArrayList从:Type List vs type ArrayList in Java

相关问题