栈类型数据的运用

如题:
代码:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.text.SimpleDateFormat;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.Deque;
import java.util.HashMap;
import java.util.Scanner;
import java.util.UUID;
import java.util.function.BiFunction;
import java.util.function.IntBinaryOperator;
import com.sun.javafx.collections.MappingChange.Map;
import interfacetest.Animal;
import interfacetest.Cat;
import interfacetest.Dog;
public class Test {
public static void main(String[] args) {
//记录重复次数,利用key是不许重复的特性,键Message是输入信息对象,包含时间,次数,内容。值Integer是记录重复次数
HashMap<Message, Integer> mapRepeat = new HashMap<Message, Integer>();
//BiFunction 操作数据value返回次数
BiFunction remappingFunction = new BiFunction<Integer, Integer, Integer>(){
@Override
public Integer apply(Integer oldValue, Integer addOne) {
//oldValue原Map的value值,addOne自增值
//计算返回的次数: 原值 + 自增值
return oldValue + addOne;
}
};
//栈类型,利用先进先出特定的方法操作,作数据存储仓库
Deque<Message> arrayDeque = new ArrayDeque<Message>(){
public Integer num = 0; //记录条数
@Override
public void addFirst(Message s) {//重写addFirst方法,
num++;
s.setNum(num);
super.addFirst(s); //加入栈顶
//merge 原值不为null,函数根据key-value计算新值返回 ,自增数值1
mapRepeat.merge(s,1,remappingFunction);
if (this.size()>10) { //存储后判断当前是否超过10条,超过则移除栈底的数据
Message s1 = this.removeLast();
s1.outer();
}
}
};
Scanner scanner = new Scanner(System.in);
while(true){
if (scanner.hasNext()){
String next = scanner.next();
if(next.equals("show")){
System.out.println("输入过:");
for (Message temp : mapRepeat.keySet()){
System.out.println(temp.getContent() +"\t"+ mapRepeat.get(temp)+"次");
}
}else if (!next.equals("exit")){
arrayDeque.addFirst(new Message(next));
}else{
break;
}
}
}
}
}
class Message{
private Integer num;
private String time;
private String content;
SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
public Message(String content) {
this.content = content;
time = format.format(new Date());
}
public void outer(){
System.out.println("第"+num+"条" + "\t" + time + "\t" + content);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((content == null) ? 0 : content.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Message other = (Message) obj;
if (content == null) {
if (other.content != null)
return false;
} else if (!content.equals(other.content))
return false;
return true;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
运行结果:
aaa
aaa
show
输入过:
aaa 2次
bbb
ccc
ddd
ccc
show
输入过:
bbb 1次
aaa 2次
ddd 1次
ccc 2次
eee
show
输入过:
bbb 1次
aaa 2次
ddd 1次
ccc 2次
eee 1次
aaa
ccc
sss
ddd
第1条 2019年11月28日15时45分36秒 aaa
ggg
第2条 2019年11月28日15时45分37秒 aaa
zzzzz
第3条 2019年11月28日15时45分43秒 bbb

浙公网安备 33010602011771号