一,遍历方法的实现原理

  1、传统的for循环遍历,基于计数器的:
    遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。
  2、迭代器遍历,Iterator:
    每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。
    而基于链式存储集合的Iterator,正常的实现,都是需要保存当前遍历的位置。然后根据当前位置来向前或者向后移动指针。
  3、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语句遍历

/**
* foreach语句遍历
*/
public static void foreachArr(){
int[] arr = new int[] { 1, 2, 3 };
for (int i : arr) {
System.out.println(i);
}
}

三,ArrayList的遍历

  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.foreach

// foreach
for (Integer integer : list) {
System.out.println(integer);
}

  3.iterator

// iterator
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
int item = iterator.next();
System.out.println(item);
}

四,HashMap的遍历

  1.通过获取所有的key按照key来遍历.

    keySet()方法:将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key

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,推荐,尤其是容量大时

    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()方式来进行遍历。

五,HashSet的遍历

  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);
}

java 遍历方法 及 数组,ArrayList,HashMap,HashSet的遍历的更多相关文章

  1. Java中如何克隆集合——ArrayList和HashSet深拷贝

    编程人员经常误用各个集合类提供的拷贝构造函数作为克隆List,Set,ArrayList,HashSet或者其他集合实现的方法.需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味 ...

  2. Java中方法与数组

    1:方法(掌握) (1)方法:就是完成特定功能的代码块. 注意:在很多语言里面有函数的定义,而在Java中,函数被称为方法. (2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...

  3. OC中几种集合的遍历方法(数组遍历,字典遍历,集合遍历)

    // 先分别初始化数组.字典和集合,然后分别用for循环.NSEnumerator枚举器和forin循环这三个方法来实现遍历 NSArray *array = @[@"yinhao" ...

  4. java - day011 - 集合, ArrayList HashMap,HashSet, Iterator 接口, for-each 循环格式

    集合 ArrayList 丑数: 能被3,5,7整除多次, ArrayList     list 接口             | - ArrayList             | - Linked ...

  5. Java集合框架Collection(1)ArrayList的三种遍历方法

    ArrayList是java最重要的数据结构之一,日常工作中经常用到的就是ArrayList的遍历,经过总结,发现大致有三种,上代码: package com.company; import java ...

  6. NDK(19)简单示例:ndk调用java基本方法、数组;使用stl、访问设备

    一.ndk调用java类示例 1,调用基本方法 /* * Class: com_example_ndksample_MainActivity * Method: ndkFindJavaClass * ...

  7. JSON对象与JSON数组的长度和遍历方法

    JSON对象与JSON数组的长度和遍历方法         1.json对象的长度与遍历                 结构:var json={“name”:”sm”,”sex”:”woman”} ...

  8. JS数组与对象的遍历方法大全

    本文简单解析各种数组和对象属性的遍历方法: 原生for循环.for-in及forEach ES6 for-of方法遍历类数组集合 Object.key()返回键名的集合 jQuery的$.each() ...

  9. JavaScript、jQuery、fish的遍历方法(each、forEach)总结

    起因 在工作中,需要在遍历的dom中找到第一个并做下操作然后退出遍历,我首先想到了用each方法,但由于无论是公用的jQuery组件还是公司的fish组件.我都忘记了怎么去退出遍历,所以就有了这篇帖子 ...

随机推荐

  1. [转帖]Office全版本零售版转换VOL

    Office全版本零售版转换VOL https://blog.51cto.com/10981246/2062137 转成bat 执行 改天试试   @ECHO OFF&PUSHD %~DP0 ...

  2. linux安装ssh服务

    1.安装openssh-server sudo apt-get install openssh-server 2.检查openssh-server是否安装成功 sudo ps -e | grep ss ...

  3. Debian下配置防火墙iptables

    debian下iptables输入命令后即时生效,但重启之后配置就会消失,可用iptables-save快速保存配置,因为Debian上iptables是不会保存规则的,然后在开机自动的时候让ipta ...

  4. Java线程的5种状态及切换(透彻讲解)-京东面试

    一.Thread的几个重要方法: 我们先了解一下Thread的几个重要方法. a.start()方法,开始执行该线程:b.stop()方法,强制结束该线程执行:c.join方法,等待该线程结束.d.s ...

  5. Lodop打印维护PRINT_SETUP本地缓存ini文件

    针对千差万别的客户端,Lodop提供了打印维护(PRINT_SETUP),可以针对某个客户端微调,调整结果保存在客户端本地,不会影响其他访问网站的用户的使用. 打印维护使用方法:1.PRINT_INI ...

  6. How to sign app

    codesign --display --verbose=4 /applications/qq.app codesign --display --entitlements - /application ...

  7. Xamarin 简化的Android密钥库签名

    安装 开始使用这个新工具不容易.在Visual Studio 2017(即将推出VS 2015),只需转到工具 - >扩展和更新,并搜索“密钥库”来查找扩展名. 下载后,只需重新启动Visual ...

  8. poj-1236(强连通分量)

    题意:给你n个点,每个点可能有指向其他点的单向边,代表这个点可以把软件传给他指向的点,然后解决两个问题, 1.问你最少需要给几个点,才能使所有点都能拿到软件: 2.问你还需要增加几条单向边,才能使任意 ...

  9. python 机械学习之sklearn的数据正规化

    from sklearn import preprocessing    #导入sklearn的处理函数用于处理一些大值数据 x_train, x_test, y_train, y_test = tr ...

  10. JSON笔记

    JSPN示例1: { "firstName": "Brett", "lastName":"McLaughlin", &q ...