一、传统的for循环遍历,基于计数器的:
遍历者本身在集合外部维护一个计数器,而后依次读取每个位置的元素,当读取到最后一个元素后,中止。主要就是须要按元素的位置来读取元素。
二、迭代器遍历,Iterator:
每个具体实现的数据集合,通常都须要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。因此基于顺序存储集合的Iterator能够直接按位置访问数据。
而基于链式存储集合的Iterator,正常的实现,都是须要保存当前遍历的位置。而后根据当前位置来向前或者向后移动指针。
三、foreach循环遍历:
根据反编译的字节码能够发现,foreach内部也是采用了Iterator的方式实现,只不过Java编译器帮咱们生成了这些代码。数组
1.for循环遍历性能
/** * for循环遍历 */ public static void forArr() { int[] arr = new int[] { 1, 2, 3 }; for (int i = 0; i < arr.length; i++) { int j = arr[i]; System.out.println(j); } }
2.foreach语句遍历spa
/** * foreach语句遍历 */ public static void foreachArr(){ int[] arr = new int[] { 1, 2, 3 }; for (int i : arr) { System.out.println(i); } }
1.for指针
List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(3); // for for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
2.foreachcode
// foreach
for (Integer integer : list) { System.out.println(integer); }
3.iteratorblog
// iterator Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { int item = iterator.next(); System.out.println(item); }
1.经过获取全部的key按照key来遍历.接口
keySet()方法:将Map中全部的键存入到set集合中。由于set具有迭代器。全部能够迭代方式取出全部的键,再根据get方法。获取每个键对应的值。 keySet():迭代后只能经过get()取key three
Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "first"); map.put(2, "second"); map.put(3, "three"); /** * 经过获取全部的key按照key来遍历 */ public static void byKey() { Set<Integer> keySet = map.keySet(); // map集合的全部key键的Set集合 for (Integer key : keySet) { String value = map.get(key); // 获得每一个key对应的value值 System.out.println("key: " + key + " -->value: " + value); } }
2.经过Map.entrySet遍历key和value,推荐,尤为是容量大时get
entrySet()方法:Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后能够e.getKey(),e.getValue()取key和value。返回的是Entry接口 。编译器
/** * 经过Map.entrySet遍历key和value,推荐,尤为是容量大时 */ public static void byEntrySet() { Set<Entry<Integer, String>> entrySet = map.entrySet(); // 经过entrySet()方法将map集合中的映射关系取出(这个关系就是Map.Entry类型) for (Entry<Integer, String> entry : entrySet) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); } }
3.经过Map.values()遍历全部的value,但不能遍历key
values()方法:是获取集合中的全部的值----没有键,没有对应关系
/** * 经过Map.values()遍历全部的value,但不能遍历key */ public static void byValues() { Collection<String> values = map.values(); for (String value : values) { System.out.println("value= " + value); } }
说明:keySet()的速度比entrySet()慢了不少,也就是keySet方式遍历Map的性能不如entrySet性能好,为了提升性能多考虑用entrySet()方式来进行遍历。
1.foreach
Set<String> set = new HashSet<String>(); set.add("first"); set.add("second"); set.add("three"); // foreach for (String string : set) { System.out.println(string); }
2.iterator
// iterator Iterator<String> setIterator = set.iterator(); while (setIterator.hasNext()) { String string = (String) setIterator.next(); System.out.println(string); }