Java 遍历List, Set, Map的正确姿势
Java中 List , Set 有共同的父类, 就是Collection. 所有实现Collection的接口的类都有一个iterator方法,用以返回一个Iterator接口的对象.
Iterator 接口定义如下:
Boolean hasNext(); //判断是否有元素没有被遍历
Object next(); //返回游标当前位置的元素并将游标移动到下一个位置
void remove(); //删除游标左边的元素, 在执行完成next() 后该操作只能执行一次
两者区别是:
List允许重复元素, 存储是有序的, 即元素插入和读取的顺序是一致的.
Set不允许有相同的元素存在, 存储是无序的, 也就是插入的元素顺序和读取出来的元素顺序会不一致.
List ,Set , Map 下的子类:
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
└Set
|-HashSet
└TreeSet
Map
├Hashtable
├HashMap
└WeakHashMap
子类的区别诸如 实现方式, 是否线程安全等等, 这里就不展开介绍了.
Map 是独立的集合, 采用键值对来存储数据也就是key-value的双列形式, 特点是键不能重复, 值可以重复.
让我们来看下遍历的方式有哪些:
使用Intellij IDE 环境, Maven 中配置文件pom.xml添加testng
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.api.test</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <properties> <!-- 指明编译源代码时使用的字符编码,maven编译的时候默认使用的GBK编码, 通过project.build.sourceEncoding属性设置字符编码,告诉maven这个项目使用UTF-8来编译 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--这里可以设置需要运行group--> <groupsTest>execShell</groupsTest> </properties> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.0.0</version> </dependency> </dependencies> </project>
创建utl package, 并新建一个ListDemo.java
package utl; import org.testng.annotations.Test; import java.util.Map.Entry; import java.util.*; public class ListDemo { @Test public void testList(){ System.out.println("--------遍历list--------"); //遍历List List list=new ArrayList(); list.add("张三"); list.add("李四"); list.add("王五"); list.add("赵六"); //foreach 循环, 遍历数字列表 for(Object str : list ){ System.out.println("forEach: "+ str); } //通过Iterator 迭代器遍历 Iterator it=list.iterator(); while (it.hasNext()){ String str=(String) it.next(); System.out.println("迭代器: "+str); } // for循环 ArrayList 查询速度是比较快的, 条件是size for(int i=0;i<list.size();i++){ System.out.println("for循环: "+list.get(i)); } //Lambda list.forEach(str->{ System.out.print("Lambda: "+str +" "); }); System.out.println("\n"); System.out.println("--------遍历Set--------"); //遍历set Set set= new HashSet(); set.add("1点"); set.add("2点"); set.add("3点"); //方式一 迭代器 while循环 Iterator i= set.iterator(); while(i.hasNext()){ System.out.println("set 迭代器: "+i.next()); }
//方式二 for循环 for (Iterator iter=set.iterator();iter.hasNext();){ System.out.println("for循环迭代: "+iter.next()); } System.out.println("--------遍历Map--------"); //遍历map Map map=new HashMap(); map.put("1","java"); map.put("2","python"); map.put("3","C#"); //第一种方法 (通过keySet)
Set keys=map.keySet();
for(Iterator iterator=keys.iterator();iterator.hasNext();){ //String keyStr=(String) iterator.next(); System.out.println("map 遍历"+map.get(iterator.next())); } //第二种方式 (通过entrySet) Set s1=map.entrySet(); for(Iterator iter=s1.iterator();iter.hasNext();){ Entry e=(Entry)iter.next(); System.out.println("map Entry "+e.getKey()+"----"+ e.getValue());; } } }
我们来看下执行结果:
更多精彩内容,关注后就知道了!
Story:
人要有一个奋斗目标,这样活起来才有精神,有奔头。整天无所事事、无聊至极的,就是因为没有目标。从小就要为自己的人生制定一个目标,然后不断地向它靠近,终有一天你会达到这个目标。如果从小就糊里糊涂,对自己的人生不负责任,没有目标没有方向,那这一生也难有作为。每个人出门,都会有自己的目的地,如果不知道自己要去哪里,漫无目的地闲逛,那速度就会很慢;但当你清楚你自己要去的地方,你的步履就会情不自禁地加快。如果你分辨不清自己所在的方位,你会茫然若失;一旦你弄清了自己要去的方向,你会精神抖擞。这就是目