目录

List遍历

Set 遍历

Map 遍历


以下分别是List、Set、Map集合的遍历示例和注释。一看便知

List遍历

@Test
	public void getList(){
		//温馨提示:测试时每个方法请单独执行(可以先将其他方法注释掉),效果更佳。
		
		/**
		 * List集合遍历获取元素方法。
		 * 查看打印结果:都是有序排列。
		 */
		/**定义集合*/
		List<String> list = new ArrayList<String>();
		list.add("刘二");
		list.add("张三");
		list.add("李四");
		list.add("王五");
		
		/**方法1、Iterator:迭代器遍历,是使用最多的输出方式,可以应用于所有的集合。*/
		Iterator<String> iterator = list.iterator();
		boolean hasNext = iterator.hasNext();//获取下一个元素,返回boolean。
		while(hasNext){	//循环遍历
			String next = iterator.next();	//获取元素,返回String。
			System.out.print(next+" ");	//打印结果:刘二 张三 李四 王五 
		}
		
		/*--------------------分割线----------------------*/
		
		/**方法2、ListIterator:是Iterator的子接口,专门用于输出List及其子类型,用法与Iterator类似。
		 */
		ListIterator<String> listIterator = list.listIterator();
		while(listIterator.hasNext()){
			System.out.print(listIterator.next()+" ");	//打印结果:刘二 张三 李四 王五 
		}
		
		/*--------------------分割线----------------------*/
		
		/**法法3、普通for循环*/
		for(int i=0;i<list.size();i++){
			System.out.print(list.get(i)+" ");	//打印结果:刘二 张三 李四 王五 
		}
		
		/*--------------------分割线----------------------*/
		
		/**方法4、foreach输出*/
		for (String s : list) {
			System.out.print(s+" ");	//打印结果:刘二 张三 李四 王五 
		}
		
		
		/** 
		 * 方法5、java8新增方法,定义变量value,通过代码块打印结果。
		 * -> 是Java8 新增的Lambda表达式中,变量和临时代码块的分隔符:(变量) -> {代码块}。 
		 */		
		
		//方法5.1
		list.forEach(value->System.out.print(value));//打印结果:刘二张三李四王五
		
		//方法5.2,比5.1多了个大括号,可以在大括号里边执行方法。
		list.forEach((value)->{
			System.out.print(value); //打印结果:刘二 张三 李四 王五 
		});
	}

Set 遍历

@Test
	public void getSet(){
		//温馨提示:测试时每个方法请单独执行(可以先将其他方法注释掉),效果更佳。
		
		/**
		 * Set集合遍历获取元素方法。
		 * 3种方法:Iterator、foreach、根据泛型获取指定类型的元素。
		 * 查看打印结果:是无序排列。
		 */
		/**定义集合*/
		Set<String> set = new HashSet<String>();
		set.add("aaa");
		set.add("bbb");
		set.add("ccc");
		set.add("ddd");
		
		/**方法1、Iterator:迭代器遍历,是使用最多的输出方式,可以应用于所有的集合。*/
		Iterator<String> iterator = set.iterator();
		boolean hasNext = iterator.hasNext();//获取下一个元素,返回boolean。
		while(hasNext){	//循环遍历
			String next = iterator.next();	//获取元素,返回String。
			System.out.print(next+" ");	//打印结果:aaa ccc bbb ddd 
		}
		
		/*------------------------------分割线--------------------------------*/
		
		/**方法2、foreach输出,JDK1.5之后提供的新功能,可以输出数组或集合。*/
		for (String s : set) {
			System.out.print(s+" ");	//打印结果:aaa ccc bbb ddd 
		}
		
		/*------------------------------分割线--------------------------------*/
		
		/**方法3、假如 set中存放的是Object*/
		Set<Object> set2 = new HashSet<Object>(); 
		set2.add("元素一");
		set2.add("abcd");
		set2.add(123);
		set2.add(3.14);
		for (Object obj : set2) {
			//判断元素obj包含的类型
			if(obj instanceof Integer){	
				 //只获取Integer类型。
				 Integer a = (Integer)obj;
				 System.out.println(a);	//打印结果:123
			}else if(obj instanceof String){	
				 //只获取String类型。
				 String a = (String)obj;
				System.out.println(a);	//打印结果:元素一  abcd
			}
		}
		
		/** 
		 * 方法4、java8新增方法,定义变量key和value,通过代码块打印结果。
		 * -> 是Java8 新增的Lambda表达式中,变量和临时代码块的分隔符:(变量) -> {代码块}。 
		 */
		//方法4.1
		set.forEach(value->System.out.print(value));//打印结果:aaacccbbbddd
		
		//方法4.2,多了个大括号
		set.forEach(value->{
			System.out.print(value);//aaacccbbbddd
		});
	}

Map 遍历

@Test
	public void getMap(){
		//温馨提示:测试时每个方法请单独执行(可以先将其他方法注释掉),效果更佳。
		
		/**
		 * Map集合遍历获取元素方法。
		 */
		Map<String,String> map = new HashMap<String,String>();
		map.put("name","张三");
		map.put("sex","男");
		map.put("age", "20");
		map.put("like","睡觉");
		
		/**方法1、使用keySet获取迭代器方法遍历,keySet():迭代后只能通过get()取key 。*/
		 Iterator<String> iterator = map.keySet().iterator();
		 while(iterator.hasNext()){
			 String key = iterator.next();
			 String value = map.get(key);
			 System.out.print(key+":"+value+"  ");	//打印结果:like:睡觉  sex:男  name:张三  age:20  ,取到结果乱序。
		 }
		 //总结:keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。
		
		/*------------------------------分割线--------------------------------*/
		
		/**方法2、通过entrySet()获取迭代器的方法遍历。
		 * 
		 * map.entrySet()返回map中各个键值对 映射关系的Set视图,返回 Set<Entry<K,V>>。
		 * 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。
		 * Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value。
		 * Map.Entry表示映射关系,里面包含getKey()和getValue()方法来获取key和value,返回的是Entry接口。
		 **/
		
		 //(1)获取键值对 映射关系的Set视图
		 Set<Entry<String,String>> entrySet = map.entrySet();
		 //(2)获取迭代器,而entryset只是遍历了第一次,它把key和value都放到了entry中
		 Iterator<Entry<String, String>> it = entrySet.iterator();
		 //(3)获取下一个元素(键值对),遍历的是entry。
		 while(it.hasNext()){
			 Entry entry = (Entry)it.next();
			 System.out.print(entry.getKey()+":"+entry.getValue()+"  ");	//打印结果:like:睡觉  sex:男  name:张三  age:20  ,取到结果乱序。
		 }
		
		 /*------------------------------分割线--------------------------------*/
		 
		 /**方法3、Map.Entry<String, String>的加强for循环遍历输出键key和值value*/
		for(Map.Entry<String, String> entry:map.entrySet()){
			System.out.print(entry.getKey()+":"+entry.getValue()+"  ");//like:睡觉  sex:男  name:张三  age:20  
		}
		
		 /**keySet()和entrySet()比较:
		  * 推荐使用第二种方式,即entrySet()方法,效率较高。
		  * 对于keySet其实是遍历了2次,一次是转为iterator,一次就是从HashMap中取出key所对于的value。
		  * 而entryset只是遍历了第一次,它把key和value都放到了entry中,所以快了。两种遍历的遍历时间相差还是很明显的。
		  */
		 
		/*------------------------------分割线--------------------------------*/
		 
		/**方法4、for循环遍历map的value值,使用方法:map.values(),返回 value*/
		for(String value:map.values()){
			System.out.println(value);
		}
		
		/*------------------------------分割线--------------------------------*/
		
		/** 
		 * 方法5、java8新增方法,定义变量key和value,通过代码块打印结果。
		 * -> 是Java8 新增的Lambda表达式中,变量和临时代码块的分隔符:(变量) -> {代码块}。 
		 */
		//方法5.1
		map.forEach((key,value)->System.out.print(key+":"+value));//打印结果:like:睡觉   sex:男   name:张三   age:20  
		
		//方法5.2
		map.forEach((key,value)->{
			System.out.print(key+":"+value+"   ");//打印结果:like:睡觉   sex:男   name:张三   age:20  
			if("张三".equals(value)){
				System.out.print(value+"这次被选中。");//打印结果:张三这次被选中。
			}
			//俩次打印结果显示内容:like:睡觉   sex:男   name:张三   张三这次被选中。age:20   
		});
		
		
	}