当前位置: 首页 > 知识库问答 >
问题:

Java中的ArrayList或List声明

松英喆
2023-03-14

这两种声明之间有什么区别?

宣言1:

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

宣言2:

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

共有3个答案

咸昀
2023-03-14

不同之处在于,变体1强制您使用ArrayList,而变体2仅保证您拥有实现列表的任何内容

稍后您可以将其更改为List

因此,我会使用List

饶谦
2023-03-14

List是一个接口,ArrayList是List接口的一个实现。除了列表界面中可用的方法外,ArrayList类只有几个方法(即clone()、trimToSize()、removeRange()和ensureCapacity())。这方面没有太大区别。

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

如果您使用第一个,您将能够调用列表界面中可用的方法,并且您不能调用ArrayList类中可用的新方法。如果你使用第二个方法,你可以自由地使用ArrayList中所有可用的方法。

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

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

将来,由于性能限制,如果要将实现更改为使用LinkedList或其他实现List接口的类,而不是ArrayList,则只需在一个点上进行更改(实例化部分)。

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

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

鲜于河
2023-03-14
List<String> arrayList = new ArrayList<String>();

是通用的,你想隐藏实现细节,同时返回给客户端,在以后的时间点,你可以改变实现从ArrayListLinkedList透明。

这种机制在您设计库等的情况下非常有用,这些库可能会在某个时间点更改它们的实现细节,而客户端的更改很少。

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

这要求您始终需要返回ArrayList。在某个时候,如果您想将实现细节更改为LinkedList,客户端也应该更改为使用LinkedList,而不是ArrayList

 类似资料:
  • 问题内容: 这两个声明之间有什么区别? 宣言1: 宣言2: 问题答案: 这是通用的,您想在将实现细节返回给客户端时隐藏实现细节,以后可以将实现从透明地更改为。 在设计库等的情况下,此机制很有用,这些库可能会在某个时间点更改其实现详细信息,而对客户端的更改最少。 这是您始终需要返回的要求。在某些时候,如果您想将实现细节更改为,也应在客户端进行更改以代替。

  • 问题内容: 我是Java新手。我想知道之间的区别: 和 和 谢谢 问题答案: 第一个仅从Java 7开始有效,并且等效于 只是不太冗长。 第三个相同,相当于 因此严格等同于第二个。 出于以下问题的答案中提到的原因,您应该首选第一个:将列表与ArrayList作为引用类型?

  • 问题内容: 我有一个带有包含泛型的参数的方法。 我想一个传递的s到这种方法。 是实现的接口。如何更改方法声明以允许这样做? 问题答案: 如果您使用的是Java 1.5版或更高版本,则可以使用通配符。 此解决方案较为通用,因为它适合的所有接口实现以及的子类/子接口。有关更多详细信息,请转到通配符教程。

  • 问题内容: 下面的行给我错误: 是什么原因? 编辑 我知道如果我将第二个ArrayList更改为List,它不会给我错误。我想知道错误的原因。谢谢 问题答案: 如果您有一个,则可以向其中添加一个。但您不能这样做,因此后者可能不是的一种。

  • 问题内容: Java开发受到压力的一个模因总是使用ArrayList而不是Vector。不推荐使用vector。可能是正确的,但是Vector和Hashtable具有同步的优点。 我正在使用面向大量并发的应用程序,使用像Vector一样同步的对象是否有益?看来他们有自己的位置? 问题答案: Vector和Hashtable的问题在于它们仅在本地同步。它们不会在并发应用程序中中断(就像在损坏的数据中

  • 我有一个ArrayList of String。 在每个索引上的外部ArrayList中,每个内部ArrayList有四个项目,有四个参数。 联系人ID 联系人姓名 联系地址 联系号码 现在,我想根据Contact Name参数对的完整ArrayList进行排序。 意味着我要访问外部Arraylist,外部Arraylist的每个索引上存在的内部Arraylist应该根据联系人名称进行排序。 比较