这两种声明之间有什么区别?
宣言1:
ArrayList<String> arrayList = new ArrayList<String>();
宣言2:
List<String> arrayList = new ArrayList<String>();
不同之处在于,变体1强制您使用ArrayList
,而变体2仅保证您拥有实现列表的任何内容
稍后您可以将其更改为
List
因此,我会使用
List
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<>();
否则,您应该在所有地方进行更改,无论您在哪里使用了特定的类实现作为方法参数。
List<String> arrayList = new ArrayList<String>();
是通用的,你想隐藏实现细节,同时返回给客户端,在以后的时间点,你可以改变实现从ArrayList
到LinkedList
透明。
这种机制在您设计库等的情况下非常有用,这些库可能会在某个时间点更改它们的实现细节,而客户端的更改很少。
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应该根据联系人名称进行排序。 比较