List<Integer> mylist = new ArrayList<Integer>();
ArrayList<Integer> mylist2 = new ArrayList<Integer>();
Run Code Online (Sandbox Code Playgroud)
我想知道java collections API中上面两者之间的实际区别是什么.我是java collections API的新手.我知道List是ArrayList类实现的接口.
该List<Integer>版本是接口类型-只允许您执行由接口声明的方法,而该ArrayList<Interger>类型的变量允许你这样做是在宣布任何东西ArrayList<Interger>和它的超类.(List当然包括).
然而,尽管选择第一个似乎"毫无用处" - 它实际上允许您更灵活 - 如果您稍后决定要LinkedList<Interger>(例如)而不是ArrayList<Interger>动态类型,它将帮助您更轻松地更改设计.
增加:
当然这并不意味着你需要自动选择List<Integer>版本.如果你确实需要使用确切的类型ArrayList- 你应该选择它.一个好的经验法则是从界面版本开始,并将它更改为ArrayList<Integer>唯一的,如果你发现自己在一个ArrayList类型上很容易做到的事情(或者如果你发现自己投射到ArrayList......)
在您的声明 1 中,由于您指的mylist是List<Integer>while it is still ArrayList<Integer>,因此您只能使用接口中可用的方法List。如果您使用跨 class.method 功能,这是更好的声明。
此外,任何接受方法都List<Integer>可以接受任何实现类,List例如LinkedList<Integer>或您的自定义实现类。
您的第二条语句仅创建并引用该对象ArrayList<Integer>。有些人更喜欢在mylist方法中本地使用它。