复习Java-从python过渡(二)(很短)

This article is categorized as "Garbage" . It should NEVER be appeared in your search engine's results.

本篇笔记很短。


iterator

example

最简单的用法:

把https://truxton2blog.com/review-java-from-python/ 的一段代码拉过来修改:

import java.util.ArrayList;

public class demo {
    public static void main(String[] args) {
        ArrayList<Object> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add("Demo");
        arrayList.add(1.4415141);
        arrayList.add(9999999999999L);
        for (Object obj : arrayList) {
            System.out.println(obj);
        }
    }
}

改成:

import java.util.ArrayList;
import java.util.Iterator;

public class demo {
    public static void main(String[] args) {
        ArrayList<Object> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add("Demo");
        arrayList.add(1.4415141);
        arrayList.add(9999999999999L);
        Iterator<Object> iterator = arrayList.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

就可以了!

另:HashMap的iterator:

import java.util.HashMap;
import java.util.Iterator;

public class demo {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("1234", "1234");
        hashMap.put("4321", "4321");
        hashMap.put("123", "123");
        hashMap.put("12345", "12345");
        Iterator<String> iterator = hashMap.keySet().iterator();
        // 注意上面这一行的.keySet():iterator和for each并没有什么本质区别,仍然要使用keySet()或者values()这样的方法先转换一步
        while (iterator.hasNext()) {
            String key = iterator.next();
            System.out.println(key + "----" + hashMap.get(key));
        }
    }
}

讨论

值得注意的是,和Scanner的nextInt(), nextFloat(), nextDouble, nextline()等多种类型选择不同,iterator只能使用hasNext()和Next():

讨论一些iterator的优缺点

下面的内容来自https://blog.csdn.net/maozhr720/article/details/76222732

  • (iterator)缺点是只能从头开始遍历, 优点是可以边遍历边删除。
  • (for each遍历) 底层实现也是基于iterator,所以也只能从头开始遍历,性能上比iterator要稍慢一些,因为多了一层类型自动转换。
  • 基于for each方式的遍历,还有一个缺点就是遍历过程中不允许删除元素,否则会抛ConcurrentModificationException

LinkedList

需要注意,虽然从设计上来看,使用index访问LinkedList是不高效的,但Java仍然提供了get(index)这样的方法来通过索引访问链表内容。 LinkedList并不是黑箱! 

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。(ref)

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

add():默认向链表的末尾添加

add(index, ):向index的位置添加,添加以后LinkedList索引的 index 位置的元素就是刚刚添加进来的元素

get(index):获取任意index上的元素

example:

import java.util.LinkedList;

public class demo {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        linkedList.add("1");
        linkedList.add("2");
        linkedList.add("3");
        linkedList.add("4");
        linkedList.add("5");
        linkedList.add(2, "between 2 and 3");  // 注意这一行是“between 2 and 3”
        for (String str : linkedList) {
            System.out.println(str);
        }
    }
}


 Last Modified in 2023-05-15 

Leave a Comment Anonymous comment is allowed / 允许匿名评论