当前位置:网站首页>List Set Map Queue Deque Stack的遍历方式总结
List Set Map Queue Deque Stack的遍历方式总结
2022-07-21 05:17:00 【吧唧!】
集合分为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对任何集合都采用同一种访问模式且对集合内部结构一无所知。
边栏推荐
猜你喜欢
Pratique et réflexion sur l'architecture d'un système intégré de messages de GI pour 100 000 TPS
MySql the first
RIP综合实验
Configuration principle and process of redis master-slave replication
VolP终端与网关
OK the telephone system rules configured in the outbound call center
静态路由综合实验
How to register IMS for Vos network phone
一套十萬級TPS的IM綜合消息系統的架構實踐與思考
第三天作业
随机推荐
What are the types of call center telephone customer service system
Configuration principle and process of redis master-slave replication
HCIP OSPF综合实验
VOS网络电话如何注册IMS
长连接网关技术专题(七):小米小爱单机120万长连接接入层的架构演进
OSPF irregular area, LSA and serial number
C语言 通讯录系统
MGRE环境下OSPF实验
Why does okcc call center introduce voice into the web?
print的运用以及两数的交换
unity 自定义小工具之“导出图集图片”
DirectX -- initialization operation
[oops framework] audio management
OSI参考模型总结
左倾堆的C#实现
Force deduction record: dynamic programming 2 knapsack problem (1) 01 knapsack - 416 split equal sum subset, 1049 weight of the last stone II, 494 target sum, 474 one and zero
二叉堆的c#实现
Directx--初始化操作
什么是SIP协议?
IM开发技术分享:浅谈IM系统中离线消息、历史消息的最佳实践