java中的遍历方式:
在java中总会遇到遍历,或许是数组,或许是集合,而数组是有限的长度,但是在集合中呢?理想中只要你的内存足够,就可以存取你想要的任何长度。
但是再说到遍历,可以分为遍历一个有序的集合或者无序的集合或者数组,下面我们就看下对于它们两者之间的不同遍历方式。
1.使用传统的for循环:
我们通常把对有下标的简单的遍历,结构为:for(起始条件;终止条件;更改起始条件){ }形如:
1 //创建的一个数组
2 int[] arr= {1,2,3,4,5,6,7,8,9};
3
4 for(int i=0;i<=arr.length;i++){
5 System.out.println(arr[i]);
6 }
7
在这种简单的for循环中,可以根据下标获取相对应的值.通常使用在数组或者有序的集合中。
2.使用增强型for循环,结构为:for( 接收循环的数据类型 值:需要循环的对象){ }
对于上面的数组遍历,也可以使用增强型循环;形如 :
for(int a:arr) {
System.out.println(a);
}
可以看出增强型循环不需要下标值,可以直接遍历出数组中的元素;通常我们使用增强型循环来遍历一个集合,该集合可以是没有下标的或者有下标的.
3.使用迭代器.但是需要说明的是,迭代器的使用只能在集合中使用.其实对集合的遍才是我写这篇文章的主要目的
Connlection中的子接口有List ,然而list有实现类 ArrayList
①.对于Arraylist 使用迭代器进行遍历
1 ArrayList<String> list=new ArrayList<>();
2 list.add("jeremy");
3 list.add("张三");
4 list.add("李四");
5
6
7 Iterator iterator=list.iterator();//调用Arraylist中的迭代器方法
8 //返回的是Iterator 类型
9
10
11 while(iterator.hasNext()) { // hasNext() 方法 判断迭代器中是否有可以迭代的元素
12 //并将指针下移
13 Object item=iterator.next();
14 System.out.println(item);
15
16 }
②对于set的遍历
//和list 集合中的遍历方法一致 区别在于set集合没有顺序
// 不可以根据下标获得
Set<String > set=new HashSet<>();
set.add("jeremy");
set.add("张三");
set.add("李四");
//使用iterator 遍历
Iterator< String > iterator=set.iterator();
while(iterator.hasNext()) {
Object object=iterator.next();
System.out.println(object);
}
//可以使用foreach循环遍历
for(String item:set) {
System.out.println(item);
}
}
当然,没有增强型循环 foreach可以使用在list中
③对于map的遍历
map的存储格式为键1----值 1,键2-----值2. 可根据get(key)方法 来取得值,key 为键
并且map也是一个无序 的集合 ,map没有自带的iterator()方法, 要遍历map,除了使用foreach
我们需要使用一个''中间人''. map中有一个方法为keyset();可以得到键,返回一个Set对象.
//创建一个map
Map<String, Object> map=new HashMap<>();
//添加数据
map.put("name", "jeremy");
map.put("name1", "张三");
map.put("name3", "李四");
//使用set作为中间人 接收键名
Set<String > set=map.keySet();
//调用set中的迭代器
Iterator< String > iterator=set.iterator();
while(iterator.hasNext()) {
Object object= iterator.next();
//根据健名获得键值
System.out.println(object+"-----"+map.get(object));
}
还有一种迭代器是Iterator的子接口LIstIterator,但是这种迭代器中用在有序的集合中,
它们之间的区别为:
是Iterator的子接口。
它的遍历只能从前往后来迭代元素。只能对迭代器列表进行删除操作,
ListIterator可以从前往后,也可以从后往前来进行迭代。可以对迭代器列表进行删除,添加,修改的操作。可以获取迭代器列表的索引。