详解Java中list,set,map的遍历与增强for循环

详解Java中list,set,map的遍历与增强for循环

Java集合类可分为三大块,分别是从Collection接口延伸出的List、Set和以键值对形式作存储的Map类型集合。

关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法。如果只做简单遍历读取,增强for循环确实减轻不少的代码量。

集合概念:

1.作用:用于存放对象
2.相当于一个容器,里面包含着一组对象,其中的每个对象作为集合的一个元素出现
3.java的容器有集合类和数组,不同之处是

区别及其常用实现类

List接口:

列表有序 元素可重复

实现类:ArrayList:动态数组列表

LinkedList:双向链表

Set接口:

集无序,元素不可重复

实现类:HashSet:散列集

TreeSet:树集 内部排序

Map接口:

以键值对的方式存储数据 数据-键不允许重复

实现类:HashSet:散列集

TreeSet:树集 内部排序

JDK1.0出现的集合类都是线程安全的,但效率低

JDK1.2出现的集合类都不是线程安全的,但效率高

代码示例如下:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set; 

public class ListAndSet{ 

  public static void main(String[] args) {
    setTest();
    listTest();
  }
  // 遍历Set集合
  private static void setTest() {
    Set<string> set = new HashSet<string>();
    set.add("A");
    set.add("B");
    set.add("C");
    set.add("D");
    set.add("E"); 

    //set集合遍历方法1:使用iterator
    Iterator<string> it = set.iterator();
    while (it.hasNext()) {
      String value = it.next();
      System.out.println(value);
    } 

    //set集合遍历方法2:使用增强for循环。
    for(String s: set){
      System.out.println(s);
    }
  } 

  // 遍历list集合
  private static void listTest() {
    List<string> list = new ArrayList<string>();
    list.add("111");
    list.add("222");
    list.add("333");
    list.add("444");
    list.add("555"); 

    // 遍历方式1:使用iterator
    Iterator<string> it = list.iterator();
    while (it.hasNext()) {
      String value = it.next();
      System.out.println(value);
    } 

    // 遍历方法2:使用传统for循环进行遍历。
    for (int i = 0, size = list.size(); i < size; i++) {
      String value = list.get(i);
      System.out.println(value);
    } 

    // 遍历方法3:使用增强for循环进行遍历。
    for (String value : list) {
      System.out.println(value);
    }
  }
} 

//关于Map类型集合的遍历,keySet()与entrySet()方法
//增强For循环
public class Map{ 

  public static void main(String[] args) {
    // 创建一个HashMap对象,并加入了一些键值对。
    Map<string, string=""> maps = new HashMap<string, string="">();
    maps.put("111", "111");
    maps.put("222", "222");
    maps.put("333", "333");
    maps.put("444", "444");
    maps.put("555", "555"); 

    // 传统的遍历map集合的方法1; keySet()
    //traditionalMethod1(maps);
    // 传统的遍历map集合的方法2; entrySet()
    //traditionalMethod2(maps);
    // 使用增强For循环来遍历map集合方法1; keySet()
    //strongForMethod1(maps);
    // 使用增强For循环来遍历map集合方法2; entrySet()
    strongForMethod2(maps);
  } 

  private static void strongForMethod2(Map<string, string=""> maps) {
    Set<entry<string, string="">> set = maps.entrySet();
    for (Entry<string, string=""> entry : set) {
      String key = entry.getKey();
      String value = entry.getValue();
      System.out.println(key + " : " + value);
    }
  } 

  private static void strongForMethod1(Map<string, string=""> maps) {
    Set<string> set = maps.keySet();
    for (String s : set) {
      String key = s;
      String value = maps.get(s);
      System.out.println(key + " : " + value);
    }
  } 

  // 使用entrySet()方法,获取maps集合中的每一个键值对,
  private static void traditionalMethod2(Map<string, string=""> maps) {
    Set<map.entry<string, string="">> sets = maps.entrySet();
    // 取得迭代器遍历出对应的值。
    Iterator<entry<string, string="">> it = sets.iterator();
    while (it.hasNext()) {
      Map.Entry<string, string=""> entry = (Entry<string, string="">) it.next();
      String key = entry.getKey();
      String value = entry.getValue();
      System.out.println(key + " : " + value);
    }
  } 

  // 使用keySet()方法,获取maps集合中的所有键,遍历键取得所对应的值。
  private static void traditionalMethod1(Map<string, string=""> maps) {
    Set<string> sets = maps.keySet();
    // 取得迭代器遍历出对应的值。
    Iterator<string> it = sets.iterator();
    while (it.hasNext()) {
      String key = it.next();
      String value = maps.get(key);
      System.out.println(key + " : " + value);
    }
  }
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • jstl之map,list访问遍历以及el表达式map取值的实现

    场景: request域里的数据为Map<Role, Map<String, List<Menu>>>,Role为枚举类型,为用户的Role那么访问遍历如下: <c:set var="user" value="${session_usr_key}" /> <c:forEach items="${roleMenuMap[user.role]}" var="entry">

  • Go语言字典(map)用法实例分析【创建,填充,遍历,查找,修改,删除】

    本文实例讲述了Go语言字典(map)用法.分享给大家供大家参考,具体如下: 字典是一种内置的数据结构,用来保存 键值对 的 无序集合. (1)字典的创建 1) make(map[KeyType]ValueType, initialCapacity) 2) make(map[KeyType]ValueType) 3) map[KeyType]ValueType{} 4) map[KeyType]ValueType{key1 : value1, key2 : value2, ... , keyN :

  • Java遍历Map键、值和获取Map大小的方法示例

    Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapTest2 { public static void main(String[] args) { HashMap map = new HashMap();

  • Map集合的四种遍历方式代码示例

    很久以前写的代码,和上一个做比较吧!便于以后查看. import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { public static void main(String[] args) { Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "a&

  • vector, list, map在遍历时删除符合条件的元素实现方法

    直接看源码,内有详细解释 /* 测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include <iostream> #include <vector> #include <list> #include <map> #include <iterator> using namespace std; void Remove1(vector<int> &

  • 详谈js遍历集合(Array,Map,Set)

    Array可以使用下标,Map和Set不能使用下标,ES6引入了iterable类型,Array,Map,Set都属于iterable类型,它们可以使用for...of循环来遍历: var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍历Array alert(x); } for (var

  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 集合概念: 1.作用:用于存放对象 2.相当于一个容器,里面包含着一组对象,其中的每个对象作为集合的一个元素出现 3.jav

  • 详解java 中Spring jsonp 跨域请求的实例

    详解java 中Spring jsonp 跨域请求的实例 jsonp介绍 JSONP(JSON with Padding)是JSON的一种"使用模式",可用于解决主流浏览器的跨域数据访问的问题.由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSO

  • 详解Java中的 枚举与泛型

    详解Java中的 枚举与泛型 一:首先从枚举开始说起 枚举类型是JDK5.0的新特征.Sun引进了一个全新的关键字enum来定义一个枚举类.下面就是一个典型枚举类型的定义: public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN } 显然,enum很像特殊的class,实际上enum声明定义的类型就是一个类. 而这些类都是类库中Enum类的子类(Java.lang.Enum).它们继承了这个Enum中的许多有用的方法.我们对代码编译之后发现,编译器将 enu

  • 详解Java中AbstractMap抽象类

    jdk1.8.0_144 下载地址:http://www.jb51.net/softs/551512.html AbstractMap抽象类实现了一些简单且通用的方法,本身并不难.但在这个抽象类中有两个方法非常值得关注,keySet和values方法源码的实现可以说是教科书式的典范. 抽象类通常作为一种骨架实现,为各自子类实现公共的方法.上一篇我们讲解了Map接口,此篇对AbstractMap抽象类进行剖析研究. Java中Map类型的数据结构有相当多,AbstractMap作为它们的骨架实现实

  • 详解Java中数组判断元素存在几种方式比较

    1. 通过将数组转换成List,然后使用List中的contains进行判断其是否存在 public static boolean useList(String[] arr,String containValue){ return Arrays.asList(arr).contains(containValue); } 需要注意的是Arrays.asList这个方法中转换的List并不是java.util.ArrayList而是java.util.Arrays.ArrayList,其中java.

  • 详解Java中String JSONObject JSONArray List<实体类>转换

    JSON使用阿里的fastJson为依赖包 gradle依赖管理如下: compile group: 'com.alibaba', name: 'fastjson', version:'1.2.41' 1.String转JSONObject 前言:String 是JSONObject格式的字符串 eg: JSONObject jSONObject = JSONObject.parseObject(String); 2.String转JSONArray 前言:String 是JSONArray格式

  • 详解Java中的HashTable

    概论 HashTable是遗留类,很多映射的常用功能与HashMap类似,不同的是它承自Dictionary类,并且是线程安全的,并发性不如ConcurrentHashMap,因为ConcurrentHashMap引入了分段锁. Hashtable不建议在新代码中使用,不需要线程安全的场合可以用HashMap替换,需要线程安全的场合可以用ConcurrentHashMap替换. 对比HashMap 的初始容量 默认11 的初始容量 需要注意的是Hashtable的默认初始容量大小是11,而Has

  • 详解Mybatis中万能的Map和模糊查询写法

    1.万能的Map 假设,我们的实体类,或者数据库中的表,字段或参数过多,我们接口参数以前用的是实体类,现在考虑使用下Map! 接口: //万能的Map int addUser2(Map<String,Object> map); mapper.xml: <!--Map中的key--> <insert id="addUser2" parameterType="map"> insert into mybatis.user (id,nam

  • 详解Java中的hashcode

    一.什么是hash Hash,一般翻译做散列.杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值.简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数. 这个说的有点官方,你就可以把它简单的理解为一个key,就像是map的key值一样,是不可重复的. 二.hash有什么用?,

  • 详解Java中的ThreadLocal

    一.ThreadLocal简介 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性.ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题. 二.ThreadLocal简单使用 下面的例子中,开启两个线程,在每个线程内部设置

随机推荐