这两个声明有什么区别?
声明1:
ArrayList<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
宣言2:
List<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
kos*_*osa 58
List<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
是通用的,您希望隐藏实现细节,同时将其返回给客户端,稍后您可以将实现从透明更改ArrayList为LinkedList透明.
在您设计库等的情况下,此机制非常有用,这可能会在某些时间点更改其实现细节,而客户端的更改很少.
ArrayList<String> arrayList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
这要求你总是需要返回ArrayList.在某些时候,如果您想要将实现细节更改为LinkedList,则客户端也应该进行更改LinkedList而不是使用ArrayList.
Dha*_*tel 12
List是一个接口,ArrayList是List接口的一个实现.该ArrayList班只有几个方法(i.e clone(), trimToSize(), removeRange() and ensureCapacity())除了在列表界面中可用的方法.这没有太大区别.
1. List<String> l = new ArrayList<>();
2. ArrayList<String> l = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
如果使用第一个,则可以调用List接口中可用的方法,并且无法调用ArrayList类中可用的新方法.ArrayList如果您使用第二个方法,则可以自由使用所有可用方法.
我会说第一种方法是更好的方法因为,当你开发java应用程序时,当你应该将集合框架对象作为方法的参数传递时,那么最好采用第一种方法.
List<String> l = new ArrayList<>();
doSomething(l);
Run Code Online (Sandbox Code Playgroud)
在将来由于性能限制,如果要更改要使用的实现LinkedList或其他实现List接口的类,而不是ArrayList,只需要在一点(实例化部分)进行更改.
List<String> l = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)
否则,您应该在所有地方进行更改,无论何处,您都使用特定的类实现作为方法参数.
区别在于变体1强制您使用ArrayListwhile变体2仅保证您有任何实现List<String>.
稍后你可以List<String> arrayList = new LinkedList<String>();毫不费力地改变它.变体1可能要求您不仅要更改该行,还要更改其他部分,如果它们依赖于使用ArrayList<String>.
因此我List<String>几乎在任何情况下都会使用,除非我需要调用提供的其他方法ArrayList(到目前为止从未如此):ensureCapacity(int)和trimToSize().
| 归档时间: |
|
| 查看次数: |
235298 次 |
| 最近记录: |