Java中List、Set、Map、Queue和Stack栈集合的遍历

一、List的遍历

        在集合类中,List是最基础的一种集合:它是一种有序列表。List的行为和数组几乎完全相同:List内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,List的索引和数组一样,从0开始 ,特点是有序允许重复。

public class List_bianli {
	public static void main(String[] args) {
		List<String> arrayList = new ArrayList<String>();
		arrayList.add("stu1");
		arrayList.add("stu2");
		arrayList.add("stu3");
		arrayList.add("stu4");
		arrayList.add("stu5");
		// 方法一:for each循环主要用于遍历数组或集合中的元素
		for (String s : arrayList) {
			System.out.println(s);
		}
		System.out.println("-----------");
		//方法二: Iterator主要用于迭代访问(即遍历)Collection中的元素
		Iterator<String> it = arrayList.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		//方法三:List的get(index)方法,返回集合index处的元素
		System.out.println("-----------");
		for (int i = 0; i < arrayList.size(); i++) {
			System.out.println(arrayList.get(i));
		}
}
}

二、Set的遍历

        Set实际上相当于一个只存储key、不存储value的特殊Map。放入Set的元素和Map的key特点类似,不允许重复。常用的Set实现类是HashSet,特点是无序唯一。

public class Set_bianli {
	public static void main(String[] args) {
		Set<String> hashSet = new HashSet<String>();
		hashSet.add("010");
		hashSet.add("025");
		hashSet.add("013");
		hashSet.add("020");
		hashSet.add("029");
		// 方式一:for each循环
		for (String x : hashSet) {
			System.out.println(x);
		}
		System.out.println("-------------");
		// 方式二:迭代器
		Iterator<String> it = hashSet.iterator();
		while(it.hasNext()) {
			String x = it.next();
			System.out.println(x);
		}
	}
}

总结:集合元素的遍历,最好用foreach();

三、Map的遍历

        Map<K, V>是一种键-值映射表,当我们调用put(K key, V value)方法时,就把key和value做了映射并放入Map。当我们调用V get(K key)时,就可以通过key获取到对应的value。如果key不存在,则返回null。和List类似,Map也是一个接口,最常用的实现类是HashMap。

public class Map_bianli {
	public static void main(String[] args) {
		Map<String, Integer> hashMap = new HashMap<String, Integer>();
		hashMap.put("stu1", 85);
		hashMap.put("stu2", 87);
		hashMap.put("stu3", 75);
		hashMap.put("stu4", 99);
		hashMap.put("stu5", 95);

		// 方法一:通过Map的键的迭代遍历Map集合的键
		// 再通过get()方法根据键获取对应的值(效率低)
		Set<String> keySet = hashMap.keySet(); // 先获取hashMap键的集合
		Iterator<String> it = keySet.iterator();
		while (it.hasNext()) {
			Object key = it.next();
			System.out.println(key + " = " + hashMap.get(key));
		}
		System.out.println("-----------");
        //方法二:for each()
        for (String key : hashMap.keySet()) {
             Integer value = hashMap.get(key);
             System.out.println(key + " = " + value);
        }
        //方法三:同时遍历key和value可以使用for each循环遍历Map对象的entrySet()集合,它包含每      
        // 一个key-value映射
        for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
             System.out.println(entry.getKey() + " = " + entry.getValue());
        }
}
}

        总结:方法三是最简洁最通用的遍历方式

四、Queue的遍历

        队列Queue是一种经常使用的集合,线性表结构,遵循先入先出、后入后出的基本原则,一般来说,它只允许在集合的前端进行删除操作,而在集合的后端进行插入操作。

        注:LinkedList既实现了List接口,又实现了Queue接口。所以,在使用的时候,如果我们把它当作List,就定义List的引用;如果我们把它当作Queue。

public class Queue_bianli {
	public static void main(String[] args) {
		Queue<String> queue = new LinkedList<String>();		
		queue.offer("E");
		queue.offer("D");
		queue.offer("C");
		queue.offer("B");
		queue.offer("A");
		System.out.println(queue);		
		//方法一:for each只是遍历没有出队
		for(String s:queue) {
			System.out.println(s);
		}
		System.out.println("-----------");
		//方法二:for循环,遍历的同时进行出队操作
		int size = queue.size();
		for(int i=0;i<size;i++) {
			System.out.println(queue.poll());
		}
		System.out.println("-----------");	
		//方法三:while循环,同时进行出队操作
		String temp;
		while((temp = queue.poll())!=null) {
			System.out.println(temp);
		}		
	}
}

五、Stack的遍历

        栈(Stack)的后进先出(LIFO:Last In First Out),只能不断地往Stack中压入(push)元素,最后进去的必须最早弹出(pop)

        所以,Stack只有入栈和出栈的操作: ○ 把元素压栈:push(E) ○ 把栈顶的元素“弹出”:pop() ○ 取栈顶元素但不弹出:peek()。

public class Stack_bianli {

	public static void main(String[] args) {
		Stack<String> stack = new Stack<String>();
		stack.push("A1");
		stack.push("A2");
		stack.push("A3");
		stack.push("A4");
		stack.push("A5");
		// 方法一:只是遍历
		for (String s : stack) {
			System.out.println(s);
		}
		System.out.println("-------------");

		//方法二:遍历并逐一出栈
		while (!stack.isEmpty()) {
			System.out.println(stack.pop());
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值