《集合框架(二)》
目录
一、Map集合
主要特点
键值对(key-value)存储,键唯一(规则同Set)。
主要实现类
- HashMap:普通常用;
- TreeMap:键可制定排序(类似TreeSet);
- ConcurrentHashMap:线程安全且效率较高。
Map测试
package com.hpr.test;
import com.hpr.entity.User;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<Integer, User> map = new HashMap<>();
map.put(1001, new User(1001, "Alice", 18));
map.put(1002, new User(1002, "BOb", 20));
map.put(1003, new User(1003, "Clover", 22));
map.put(1001, new User(1001, "Divid", 21)); //键重复元素
//输出map大小
System.out.println(map.size());
//移除元素
map.remove(1004);
//遍历-1:键遍历
System.out.println("--------------------键遍历--------------------");
for (Integer k : map.keySet()) {
System.out.println(k + "——" + map.get(k));
}
//遍历-2:for_each遍历
System.out.println("--------------------for_each遍历--------------------");
for (Map.Entry<Integer, User> m : map.entrySet()) {
System.out.println(m.getKey() + "——" + m.getValue());
}
//遍历-3:lambada表达式
System.out.println("--------------------lambada表达式--------------------");
map.forEach((k, v) -> System.out.println(k + "——" + v));
//遍历-4:迭代器遍历
System.out.println("--------------------迭代器遍历--------------------");
Iterator<Map.Entry<Integer, User>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, User> m = it.next();
System.out.println(m.getKey() + "——" + m.getValue());
}
}
}
执行结果
注意:出现重复元素,Set中保留前者,Map中保留后者。
二、栈与队列
- 栈:先进后出,后进先出(入口即出口,类似弹夹);
- 队列:先进先出,后进后出(类似单向管道)。
Stack
Stack<String> stack = new Stack<>();
//添加元素
stack.push("a");
stack.push("b");
stack.push("c");
stack.push("d");
//查看栈顶元素
System.out.println(stack.peek());
//查看并弹出栈顶元素
System.out.println("------------------查看并弹出栈顶元素------------------");
int size = stack.size();
for (int i = 0; i < size; i++) {
System.out.println(stack.pop());
}
执行结果
Queen
Queue<String> queue = new ConcurrentLinkedDeque<>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
//查看队列中第一个元素
System.out.println(queue.peek());
//查看并弹出元素
System.out.println("------------------查看并弹出元素------------------");
int size = queue.size();
for (int i = 0; i < size; i++) {
System.out.println(queue.poll());
}
执行结果
三、集合工具类
Collections 是Collection接口的辅助工具类,常用方法如下。
void sort(List<T> list) //排序
void reverse(List<?> list) //转置
void copy(List<? super T> dest, List<? extends T> src) //复制
T max(Collection<? extends T> coll) //找最大
T min(Collection<? extends T> coll) //找最小
int indexOfSubList(List<?> source, List<?> target) //查询指定集合在原集合中首次出现位置
int lastIndexOfSubList(List<?> source, List<?> target) //查询指定集合在原集合中末次出现位置
...
总结
重点
- Map集合的特点及使用;
- 栈与队列的概念及使用。
难点
- Map集合结构及遍历方式。