不同类型的for循环

cod*_*r77 0 java for-loop

我有两种类型的for循环,fileList在这种情况下只是一个扩展的自定义类AbstractList<Object>

1)对于循环迭代索引:

public String getExtensionByDescription(String description)
{
    for (int i = 0; i < fileList.size(); i++)
        if (description.contains(fileList.get(i).getDescription()))
            return fileList.get(i).getExtension();
}
Run Code Online (Sandbox Code Playgroud)

2)对于按列表中的项目循环迭代:

public String getExtensionByDescription(String description)
{
    for (FileType obj : fileList)
        if (description.contains(obj.getDescription()))
            return obj.getExtension();
}
Run Code Online (Sandbox Code Playgroud)

方法1)和2)逻辑上是相同还是否?因为1)返回我期望的值,但方法2)返回错误的值.谢谢您的帮助!

使用各种其他get方法实现list.

public class FileList extends AbstractList<Object>
{
    private ArrayList<FileType> fileList;

    public FileList()
    {
        fileList = new ArrayList<FileType>();
    }

    public void add(String search, String type, String extension, String description, String htmlicon)
    {

        FileType data = new FileType(fileList.size(), search, type, extension, description, htmlicon);
        if (!fileList.contains(data))
        {
        fileList.add(data);
        }
    }

    @Override
    public Object get(int index)
    {
        return fileList.toArray()[index];
    }
Run Code Online (Sandbox Code Playgroud)

而另一个是

public FileType(int index, String search, String type, String extension, String description, String icon)
Run Code Online (Sandbox Code Playgroud)

功能:

public String getDescription()
{
    return description;
}
Run Code Online (Sandbox Code Playgroud)

Zby*_*000 5

如果它是正确的实现List,那么它们在逻辑上是相同的(尽管它们在性能方面可能不同).

如果它们给出不同的结果,则任何get(int)方法或iterator()方法都不会按预期运行,即不返回i-th元素或不遍历所有元素.

编辑:更新问题后问题很明显 - 你重写get(int)方法(尽管它返回Object但在代码中它作为FileType访问 - 看起来很可疑).但是没有覆盖iterator()方法.在Iterator其通过返回iterator()实际上是在所述第二编译器用于循环透明.除非你覆盖代码永远不会工作.