目录
以下分别是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类似。
* 比较和Iterator的区别可参考:https://blog.csdn.net/longshengguoji/article/details/41551491
*/
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
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/15944.html