zoukankan      html  css  js  c++  java
  • 栈类型数据的运用

     如题:

    代码:

    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() +"	"+ 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+"条" + "	" + time + "	" + 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

  • 相关阅读:
    .net core 大型事务的处理办法
    .net Core把一个list集合里面的所有字段的数值汇总
    C#使用模板导出Excel
    JQuery滚动分页查询功能
    返回一个条件表达式树的拓展方法
    C++类的大小
    基数排序-八大排序汇总(8)
    归并排序-八大排序汇总(7)
    快速排序(交换排序)-八大排序汇总(6)
    希尔排序(插入排序)-八大排序汇总(5)
  • 原文地址:https://www.cnblogs.com/hcklqy/p/11950676.html
Copyright © 2011-2022 走看看