Java:迭代器和arraylists之间的区别

duk*_*vin 3 iterator arraylist

您如何向刚刚开始使用Java编程的人解释,ArrayLists和Iterators之间的区别是什么?

为什么我会使用迭代器而不是使用Arraylist的get()方法

sch*_*tic 6

ArrayList是一个实际的数据结构,是List接口的一个实现.Iterator只是一个允许您浏览任何数据结构的接口(只要Iterator可用于该数据结构).

换句话说,ArrayList是物理存储在数组中的对象引用(或基元)的实际列表.ArrayList是List接口的"实现",这意味着它提供了适用于List的所有方法的实现,例如add(object),remove(object),get(index)等.

迭代器是一种更通用的方式来浏览任何数据结构,无论是Set,List,等等.重要的一点是,它允许您浏览数据结构中的每个元素一次,然后就完成了.从文档中可以看出Iterator规定了两个方法,next()和hasNext().next返回底层数据结构中的下一个元素,hasNext让您知道底层数据结构中是否还有下一个元素.包含ArrayList的几个数据结构可以为您提供迭代器.

为什么我会使用迭代器而不是使用Arraylist的get()方法?

好吧,就像许多接口一样,Iterator允许你做同样的事情,无论底层实现是什么.如果我想"迭代"一些数据结构,我也可以

a)编写专门针对数据结构的代码(例如ArrayList),如果我将数据结构更改为其他内容(例如HashSet),我将不得不稍后更改

b)从数据结构中获取Iterator,并使用相同的hasNext/next技术,即使我将数据结构更改为其他内容也是如此.

仅供参考,如果您对"界面"和"实施"一词不太熟悉,您可能应该在"Java界面"上进行谷歌搜索.


duf*_*ymo 5

ArrayList是一种特殊的列表。它是一种数据结构,例如树,地图或列表。

一个迭代器是一个的例子设计图案通过一个数据结构,用于行走。您不会像使用二叉树那样浏览列表,但是Iterator提供了一个界面,该界面描述了所有数据结构浏览器的共同点。

因此,您可以使用迭代器遍历ArrayList。他们不是同一回事。一个是导航器,另一个是容器。

那么,为什么相对于仅对数组列表使用get()方法,您更喜欢使用Iterator?

并非所有集合都具有get()方法(例如,集合和集合以及二叉树)。如果需要从ArrayList切换到这些数据结构之一,则还必须重写所有调用get()的代码。

但是,如果返回Iterator,则代码的客户端不必知道您已经更改了实现。

如果使用get(),则使用给定的实现。如果使用Iterator接口,则可以交换实现以执行诸如智能代理之类的事情,而不会影响客户端。

这是关于隐藏有关类客户端导航的详细信息。如果仅使用ArrayList,则可能没有太大关系。但是,如果您正在设计自己的类,则可能会发现Iterator为您提供了一种公开行为而又不泄露私有细节的好方法。