最近我在Eclipse中为一个项目制作了Bukkit Minecraft插件,并且我一直在使用arraylist来存储播放器对象。在尝试优化我的代码之后,我意识到还有另一种使用java Collection定义所述对象列表的方法。现在我有了基础知识,一个集合,不像arraylist,不允许你根据索引引用变量,但我没有在我的代码中使用它,所以我想知道是否还有其他优点关于CPU或内存使用情况? 注意*我知道通过将变量作为集合传递它更容易将其转换为其他形式的列表,但我确信我不会在我的代码中执行此操作因此我不会不能将此作为一个优势。
答案 0 :(得分:2)
Collection
不是一个类,它是一个接口。也就是说,它实际上并没有做任何东西;它只是定义了哪些方法可用。实际上,ArrayList
支持Collection
接口。所以,你可以这样做:
ArrayList<Integer> list = new ArrayList<>();
但是您可以执行以下操作,它们功能相同:
Collection<Integer> list = new ArrayList<>();
但是,在后一个示例中,由于您现在将ArrayList
引用为Collection
,因此您只能访问Collection
上的方法,正如您所发现的那样,比ArrayList
更受限制。
ArrayList
还支持List
接口,它本身扩展Collection
,并提供其他列表方法,因此您可以执行此操作(通常建议这样做):
List<Integer> list = new ArrayList<>();
因此Collection
vs ArrayList
的效果并非真正有效。我认为您希望知道的是不同List
实现的比较性能。 Java中的主要单线程实现是ArrayList
和LinkedList
。这些是这样创建的:
List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();
你会发现很多材料都有各自的优点和缺点。例如:When to use LinkedList over ArrayList?