Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java列表创建方法的差异_Java - Fatal编程技术网

java列表创建方法的差异

java列表创建方法的差异,java,Java,这样定义arraylist有什么区别: List list = new LinkedList(); 像这样 LinkedList list = new LinkedList(); 其中一个变量的类型使用。另一个使用类型 一般来说,最好对变量类型使用接口类型,因为它们更具可移植性,并且生成的代码也不太紧凑。这两种方法都有效。区别在于List是一个接口,LinkedList是一个实现。使用接口被认为是一种更好的做法,因为您可以在以后轻松地切换实现。这称为接口编码。它有一定的好处。根据你的问题,

这样定义arraylist有什么区别:

List list = new LinkedList(); 
像这样

LinkedList list = new LinkedList();
其中一个变量的类型使用。另一个使用类型


一般来说,最好对变量类型使用接口类型,因为它们更具可移植性,并且生成的代码也不太紧凑。

这两种方法都有效。区别在于
List
是一个接口,
LinkedList
是一个实现。使用接口被认为是一种更好的做法,因为您可以在以后轻松地切换实现。

这称为接口编码。它有一定的好处。根据你的问题,我认为你对这门语言还不熟悉

根据java world,以下是一些好处

设计:可以快速指定对象的方法并 发布给所有受影响的开发人员开发:Java编译器 保证接口的所有方法都是通过 签名正确,并且对接口的所有更改都是正确的 其他开发人员可以立即看到集成:有 能够快速将类或子系统连接在一起,因为 他们完善的接口测试:接口帮助隔离 错误,因为它们将可能的逻辑错误的范围限制在给定的范围内 方法子集


这是开始阅读的好地方

第一个声明了一个列表,并使用列表接口的新LinkedList具体实现对其进行初始化。代码的其余部分并不关心具体的实现。唯一重要的是它是一个列表。如果您后来意识到ArrayList更高效,那么只需更改初始化即可

第二个声明一个LinkedList,并用一个新的LinkedList初始化它。代码的其余部分知道它是一个LinkedList,并且可以使用LinkedList中不在列表中的方法。如果您后来意识到ArrayList更高效,那么您可能需要更改其余的代码

第一种应该是首选的:尽可能使用最通用的类型,并将代码转换为接口,而不是实现

此外,您不应使用原始类型,而应始终使用泛型类型:

List<String> list = new LinkedList<String>();
List List=newlinkedlist();

正如其他答案所建议的,List是接口,LinkedList是实际的实现类型。例如,如果您后来决定使用ArrayList,可以键入:

List list = new ArrayList();
因为ArrayList声明了接口列表。缺点是,如果您想稍后调用ArrayList/LinkedList/(包含不在列表中的方法的其他类名)中不属于列表接口的任何方法(这可能不会成为问题),则必须检查它是否确实是ArrayList等,并将其转换为这些类型。像这样:

ArrayList arrayList = (ArrayList) list;

*只有在检查它是否真的是ArrayList之后,否则抛出异常

首先,arraylist和arraylist都不是,另外还有一个提到泛型——我整天都在与10年前的遗留代码作斗争,这是最糟糕的:Vector foo=new Vector();