Java 中的 ArrayList 或 List 声明

2022-08-31 12:46:15

这两种声明有什么区别?

声明 1:

ArrayList<String> arrayList = new ArrayList<String>();

声明 2:

List<String> arrayList = new ArrayList<String>();

答案 1
List<String> arrayList = new ArrayList<String>();

是通用的,您希望在将实现详细信息返回到客户端时隐藏它,以后可以将实现从透明更改为透明。ArrayListLinkedList

此机制在设计库等的情况下很有用,这些库可能会在某个时间点更改其实现细节,而客户端上的更改最少。

ArrayList<String> arrayList = new ArrayList<String>();

这要求你总是需要返回。在某个时间点,如果要将实现详细信息更改为 ,则客户端上也应该进行更改以代替 。ArrayListLinkedListLinkedListArrayList


答案 2

List是一个接口,是 List 接口的实现。除了 List 接口中提供的方法外,该类只有几种方法。这方面没有太大的区别。ArrayListArrayList(i.e clone(), trimToSize(), removeRange() and ensureCapacity())

   1. List<String> l = new ArrayList<>();
   2. ArrayList<String> l = new ArrayList<>();

如果使用第一个,您将能够调用 List 接口中可用的方法,并且无法调用该类中可用的新方法。在 as 中,您可以自由使用 if 中使用第二种方法中的所有可用方法。ArrayListArrayList

我会说第一种方法是更好的方法,因为当您开发java应用程序时,当您应该将集合框架对象作为参数传递给方法时,那么最好采用第一种方法。

List<String> l = new ArrayList<>();
doSomething(l);

将来由于性能限制,如果您要将实现更改为 use 或实现接口的其他类,而不是 ,则只需在某一点(实例化部分)进行更改。LinkedListListArrayList

List<String> l = new LinkedList<>();

否则,您应该在所有位置进行更改,无论在哪里,您都使用特定的类实现作为方法参数。


推荐