Java中的LinkedList是否实现了默认迭代器?
我正在研究Java类和继承,我对接口有疑问 LinkedList类根据Oracle文档实现了可序列化、可克隆、可重用、集合、Deque、列表和队列 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它必须实现一个默认迭代器,不是吗? 如果理解正确,我在哪里可以看到实现 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它 必须实现一个默认迭代器,不是吗 不是真的,如果超类重写了方法,那么子类就不必 看看这个:Java中的LinkedList是否实现了默认迭代器?,java,interface,linked-list,iterator,iterable,Java,Interface,Linked List,Iterator,Iterable,我正在研究Java类和继承,我对接口有疑问 LinkedList类根据Oracle文档实现了可序列化、可克隆、可重用、集合、Deque、列表和队列 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它必须实现一个默认迭代器,不是吗? 如果理解正确,我在哪里可以看到实现 因为Iterable是一个接口,而不是像LinkedList那样的类,所以它 必须实现一个默认迭代器,不是吗 不是真的,如果超类重写了方法,那么子类就不必 看看这个: interface IFoo {
interface IFoo {
int getFoo();
}
class A implements IFoo {
@Override
public int getFoo() {
// TODO Auto-generated method stub
return 0;
}
}
class B extends A {
// ...
}
class C extends A implements IFoo {
// ...
}
注意c类是如何编译的,即使它(冗余地)实现了Ifoo,但没有覆盖getFoo方法(这只可能是因为c扩展了一个)
该类看起来像:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
public abstract class AbstractCollection<E> implements Collection<E> {
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
所以在类层次结构中
其中AbstractCollection看起来像:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
public abstract class AbstractCollection<E> implements Collection<E> {
公共抽象类AbstractCollection实现集合{
因此,它们确实覆盖了interface Iterable
因为Iterable是一个接口,而不是像LinkedList那样的类,所以它
必须实现一个默认迭代器,不是吗
不是真的,如果超类重写了方法,那么子类就不必
看看这个:
interface IFoo {
int getFoo();
}
class A implements IFoo {
@Override
public int getFoo() {
// TODO Auto-generated method stub
return 0;
}
}
class B extends A {
// ...
}
class C extends A implements IFoo {
// ...
}
注意c类是如何编译的,即使它(冗余地)实现了Ifoo,但没有覆盖getFoo方法(这只可能是因为c扩展了一个)
该类看起来像:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
public abstract class AbstractCollection<E> implements Collection<E> {
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、java.io.Serializable
{
所以在类层次结构中
其中AbstractCollection看起来像:
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
public abstract class AbstractCollection<E> implements Collection<E> {
公共抽象类AbstractCollection实现集合{
因此,它们确实覆盖了链接列表类本身中的Iterable接口方法。您将在链接列表类本身中找到Iterable接口方法的实现。您将在链接列表类本身中找到Iterable接口方法的实现。简而言之,在源代码中 较长的答案是
LinkedList
本身不需要实现迭代器()
方法,如果它继承自另一个可能实现它的类。如果仔细查看,可以看到LinkedList没有定义迭代器()
method,但当您实现Iterable
时,它应该在那里。查看结尾部分,您还可以看到继承的方法部分。具体查看“从类java.util.AbstractSequentialList继承的方法”,其中列出了iterator()
现在我们已经确定,iterator
实际上在java.util.AbstractSequentialList
中。因此,要找到实现,您可以查看AbstractSequentialList
的
public Iterator<E> iterator() {
return listIterator();
}
现在,在LinkedList
类中实现了listIterator(int)
方法
public ListIterator<E> [More ...] listIterator(int index) {
checkPositionIndex(index);
return new ListItr(index);
}
publicListIterator[More…]ListIterator(int索引){
检查位置索引(索引);
返回新的ListItr(索引);
}
如果您需要进一步分析is的功能,可以从那里继续。简短的回答是,在源代码中 较长的答案是
LinkedList
本身不需要实现迭代器()
方法,如果它继承自另一个可能实现它的类。如果仔细查看,可以看到LinkedList没有定义迭代器()
method,但当您实现Iterable
时,它应该在那里。查看结尾部分,您还可以看到继承的方法部分。具体查看“从类java.util.AbstractSequentialList继承的方法”,其中列出了iterator()
现在我们已经确定,iterator
实际上在java.util.AbstractSequentialList
中。因此,要找到实现,您可以查看AbstractSequentialList
的
public Iterator<E> iterator() {
return listIterator();
}
现在,在LinkedList
类中实现了listIterator(int)
方法
public ListIterator<E> [More ...] listIterator(int index) {
checkPositionIndex(index);
return new ListItr(index);
}
publicListIterator[More…]ListIterator(int索引){
检查位置索引(索引);
返回新的ListItr(索引);
}
如果您需要进一步分析is的功能,您可以从那里继续。因此LinkedList类扩展了AbstractSequentialList类。该类具有称为迭代器的方法。由于LinkedList扩展了AbstractSequentialList类,我们可以使用迭代器方法
public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
public Iterator<E> iterator(){
//implementation
}
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共抽象类AbstractSequentialList
扩展抽象列表{
公共迭代器迭代器(){
//实施
}
}
现在LinkedList类扩展了AbstractSequentialList类。因此,通过创建LinkedList类的对象,我们可以使用迭代器方法
public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
public Iterator<E> iterator(){
//implementation
}
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、Serializable{
}
因此LinkedList类扩展了AbstractSequentialList类。该类具有称为迭代器的方法。由于LinkedList扩展了AbstractSequentialList类,我们可以使用迭代器方法
public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
public Iterator<E> iterator(){
//implementation
}
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共抽象类AbstractSequentialList
扩展抽象列表{
公共迭代器迭代器(){
//实施
}
}
现在LinkedList类扩展了AbstractSequentialList类。因此,通过创建LinkedList类的对象,我们可以使用迭代器方法
public abstract class AbstractSequentialList<E>
extends AbstractList<E>{
public Iterator<E> iterator(){
//implementation
}
}
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, Serializable{
}
公共类链接列表
扩展抽象顺序列表
实现List、Deque、Cloneable、Serializable{
}
可以,但是