我有两种类型的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)
如果它是正确的实现List,那么它们在逻辑上是相同的(尽管它们在性能方面可能不同).
如果它们给出不同的结果,则任何get(int)方法或iterator()方法都不会按预期运行,即不返回i-th元素或不遍历所有元素.
编辑:更新问题后问题很明显 - 你重写get(int)方法(尽管它返回Object但在代码中它作为FileType访问 - 看起来很可疑).但是没有覆盖iterator()方法.在Iterator其通过返回iterator()实际上是在所述第二编译器用于循环透明.除非你覆盖代码永远不会工作.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |