当前位置:首页 > Java API 与类库手册 > 正文

Java优学网Iterator遍历短文:安全遍历与高效操作指南

List fruits = Arrays.asList("apple", "banana", "orange"); Iterator iterator = fruits.iterator();

while(iterator.hasNext()) {

String fruit = iterator.next();
if("banana".equals(fruit)) {
    iterator.remove(); // 安全地移除香蕉
}

}

List list = new ArrayList<>(Arrays.asList("A", "B", "C")); Iterator iterator = list.iterator();

while(iterator.hasNext()) {

Java优学网Iterator遍历短文:安全遍历与高效操作指南

String item = iterator.next();
if("B".equals(item)) {
    list.remove(item); // 这里会抛出ConcurrentModificationException
}

}

// ArrayList遍历 List arrayList = new ArrayList<>(); // 填充数据... long start = System.currentTimeMillis(); Iterator arrayIterator = arrayList.iterator(); while(arrayIterator.hasNext()) {

String item = arrayIterator.next();
// 处理逻辑

} long arrayTime = System.currentTimeMillis() - start;

Java优学网Iterator遍历短文:安全遍历与高效操作指南

// LinkedList遍历
List linkedList = new LinkedList<>(); // 填充相同数据... start = System.currentTimeMillis(); Iterator linkedIterator = linkedList.iterator(); while(linkedIterator.hasNext()) {

String item = linkedIterator.next();
// 相同处理逻辑

} long linkedTime = System.currentTimeMillis() - start;

public class DirectoryIterator implements Iterator {

private Queue<File> queue = new LinkedList<>();

public DirectoryIterator(File root) {
    if(root.isDirectory()) {
        queue.offer(root);
    }
}

@Override
public boolean hasNext() {
    return !queue.isEmpty();
}

@Override
public File next() {
    if(!hasNext()) {
        throw new NoSuchElementException();
    }
    
    File current = queue.poll();
    if(current.isDirectory()) {
        File[] children = current.listFiles();
        if(children != null) {
            for(File child : children) {
                queue.offer(child);
            }
        }
    }
    return current;
}

}

你可能想看:

相关文章:

文章已关闭评论!