List Set Map Queue Deque Stack的遍历方式总结


集合分为collection和Map,Java中遍历集合,可以统一通过实现迭代器Iterator接口来进行集合的遍历。

一、List接口

List:一种有序列表的集合,允许添加重复元素。具体实现类有ArrayList(基于数组实现)和LinkedList(基于链表实现)。

List的三种遍历方式

1、for循环遍历
	for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
	}
2、foreach循环(和迭代器原理相同)
for(String s:list) {
			System.out.println(s);
		}
3、Iterator迭代器
	Iterator<String> itor=list.iterator();
		while(itor.hasNext()) {
			System.out.println(itor.next());
		}

二、Set接口

Set(相当于Map的key,没有value)使用Map作为存储结构,不允许重复(可用于去除重复元素值),元素需要正确覆写equals()和hashCode()方法,否则无法正确放入Set。
常见实现类:HashSet(无序唯一)和TreeSet (TreeSet有序,实现了sortedSet接口)

Set的两种遍历方式

1、foreach(相当于iterator)
for(String s:set) {
			System.out.println(s);
		}
1、Iterator 迭代器
Iterator<String> it=set.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}

三、Map接口

Map:使用键值对存元素key-value,key不允许重复,value可以重复。
常见三种实现类:
HashMap:最常用的Map实现类,采用数组+链表+红黑树存储,
LinkedHashMap:不能重复,有序
TreeMap:不能重复,但可以自动排序

Map的两种遍历方式

1、for each遍历

Map的keySet()方法,返回Set集合

	Map<String, Integer> map=new HashMap<String, Integer>();
	map.put("A", 11);
	map.put("D", 22);
	map.put("C", 99);
	for(String key:map.keySet()) {
		Integer value=map.get(key);
		System.out.println(key+"-"+value);
	}

Map的entrySet()集合,包含key-value

	Map<String, Integer> map=new HashMap<String, Integer>();
	map.put("A", 11);
	map.put("D", 22);
	map.put("C", 99);  
	for(Map.Entry<String, Integer> entry:map.entrySet()) {
		System.out.println(entry);
	}
2、Iterator迭代器

Map的keySet()方法,返回Set集合,iterator 迭代器

	Map<String, Integer> map=new HashMap<String, Integer>();
	map.put("A", 11);
	map.put("D", 22);
	map.put("C", 99);
	
	Iterator<String> it=map.keySet().iterator();
	while(it.hasNext()) {
		String key=it.next();//it.next()一次循环用一次,所以要用key存保证每次循环值不变
		System.out.println(key+"="+map.get(key));
	}

Map的entrySet()集合,包含key-value,iterator迭代器

Iterator<Map.Entry<String, Integer>> it=map.entrySet().iterator();
	while(it.hasNext()) {
		System.out.println(it.next());
	}

四、Queue 队列 (接口)

Queue:先进先出(first in first out)线性表结构。只两个基本操作,把元素添加至队尾,从队头取出元素。
有界队列的常见实现类:ArrayBlockingQueue
无界队列的常见实现类:LinkedList

queue的两种遍历方式

1、第一种遍历方式
Queue<String> q=new LinkedList<String>();
	q.offer("A");
	q.offer("C");
	q.offer("B");
	String str=null;
	while((str=q.poll())!=null) {
		System.out.println(str);
	}
2、foreach循环(和迭代器原理相同)
	for(String s:q) {
		System.out.println(s);
	}
3、Iterator迭代器
	Iterator<String> it=q.iterator();
	while(it.hasNext()) {
		System.out.println(it.next());
	}

五、Deque 双端队列(接口)

Deque:继承了Queue接口,但与Queue不同的是:入队既可以在队尾,也可在队首。出队也是即可队尾出队,也可队首出队。(调用方法通常为xxxfirst()或xxxlast()。) 实现类有ArrayList和LinkedList

Deque的两种遍历方式

1、第一种遍历方式
	Deque<String> dq=new LinkedList<String>();
		dq.addFirst("A");
		dq.addFirst("C");
		dq.addLast("B");
		String str=null;
		while((str=dq.poll())!=null) {
			System.out.println(str);
		}
2、for each遍历
	for(String s:dq) {
		System.out.println(s);
	}
3、Iterator迭代器
	Iterator<String> it=dq.iterator();
	while(it.hasNext()) {
		System.out.println(it.next());
	}

六、Stack 栈

Stack:后进先出(LIFO),往stack中压入(push(E))元素,最后进去的最早弹出(pop(E)),取出栈顶元素但不弹出(peek(E))。

Stack的两种遍历方式

1、遍历并出栈
Stack<String> stack=new Stack<String>();
	stack.push("A1");
	stack.push("A3");
	stack.push("A2");
	while(!stack.isEmpty()) {
		System.out.println(stack.pop());
	}	
2、for each遍历
for(String s:stack) {
		System.out.println(s);
	}
2、Iterator迭代器
	Iterator<String> it=stack.iterator();
	while(it.hasNext()) {
		System.out.println(it.next());
	}

总结

Java的集合都可以用for each循环,List、Set、Queue…会迭代每个元素,Map会迭代每个key。Java集合使用统一的iterator遍历,Iterator对任何集合都采用同一种访问模式且对集合内部结构一无所知。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值