我想问一个关于在java的Collections API中使用List
的问题:
List <Integer> list = new ArrayList<>();
ArrayList<Integer> aList = new ArrayList<>();
我们可以使用其中任何一个来创建ArrayList
的对象,这是创建ArrayList
的更好方法,为什么?
答案 0 :(得分:2)
第一个选项使代码的其余部分更加模块化,因为您可以通过更改单行代码来替换代码使用的List实现。
你只需要改变
List <Integer> list = new ArrayList<>();
到
List <Integer> list = new SomeOtherListImplementation<>();
将变量声明为ArrayList会将您的代码绑定到List接口的ArrayList实现。
但是,如果您的代码需要使用不属于List接口的ArrayList方法,则可能必须使用ArrayList变量。
答案 1 :(得分:0)
第一个案例称为programming to interfaces。
如果您坚持使用接口编程并稍后实现您的程序,您可以将其更改为其他实现。
前者
List <Integer> list = new LinkedList<>();
如果你以第一种方式编码,那么当你需要改变时只需更改初始化部分的右手边即可完成,没有任何代码破坏且没有任何编译器错误。
答案 2 :(得分:0)
ArrayList<Integer> aList = new ArrayList<>();
如果稍后未修改变量aList,则上面的代码行是可以的。
List <Integer> list = new ArrayList<>();
但是如果你想为你的代码添加更多的灵活性,我会建议这样做,因为你可以稍后将列表变量声明为不同的List实现。
List <Integer> list = new LinkedList<>();
它不会破坏代码,因为它确保您只调用List接口定义的方法。
答案 3 :(得分:0)
第一种方法是模块化的。这是利用&#34; 基类指针可以指向派生类对象&#34;
的事实。当我们传递论据时,这特别有用。比方说,
public void display(List<String> names);
LinkedList<String> names = new LinkedList<String>();
display(names);