import java.util.HashMap;
//一种消息接收并打印的结构设计
public class PrintStruct{
//定义节点的信息
public static class Node{
public int num; //定义节点的值
public Node next;
public Node(int num){
this.num=num;
}
}
public static class MessageBox{
private HashMap<Integer,Node>headMap;
private HashMap<Integer,Node>tailMap;
private int lastPrint;
//构造函数实现成员的初始化
public MessageBox()
{
headMap=new HashMap<Integer,Node>();
tailMap=new HashMap<Integer,Node>();
lastPrint=0;
}
//接收数字
public void receive(int num){
if(num<1)
{
return ;
}
Node cur=new Node(num);
headMap.put(num,cur);
tailMap.put(num,cur);
if(tailMap.containsKey(num-1))
{
tailMap.get(num-1).next=cur; //链接到当前节点
tailMap.remove(num-1);
headMap.remove(num);
}
if(headMap.containsKey(num+1))
{
cur.next=headMap.get(num+1);
tailMap.remove(num);
headMap.remove(num+1);
}
if(headMap.containsKey(lastPrint+1))
{
print(); //打印输出所有的数
}
}
//打印输出数
public void print()
{
Node node=headMap.get(++lastPrint);
headMap.remove(lastPrint);
while(node!=null)
{
System.out.print(node.num+" ");
node=node.next;
lastPrint++;
}
tailMap.remove(--lastPrint);
System.out.println();
}
}
//产生随机的1-10之间的数
public static int generateRan()
{
return (int)(Math.random()*10);
}
public static void main(String[]args)
{
MessageBox box=new MessageBox();
//System.out.println("Hello");
// for(int i=0;i<100;i++)
// {
// int k=generateRan();
// System.out.println(k);
// box.receive(k);
// }
box.receive(2); // - 2
box.receive(1); // 1 2 -> print, trigger is 1
box.receive(4); // - 4
box.receive(5); // - 4 5
box.receive(7); // - 4 5 - 7
box.receive(8); // - 4 5 - 7 8
box.receive(6); // - 4 5 6 7 8
box.receive(3); // 3 4 5 6 7 8 -> print, trigger is 3
box.receive(9); // 9 -> print, trigger is 9
box.receive(10); // 10 -> print, trigger is 10
box.receive(12); // - 12
box.receive(13); // - 12 13
box.receive(11); // 11 12 13 -> print, trigger is 11
}
}
一种消息接收并打印的结构设计
最新推荐文章于 2022-07-01 16:56:39 发布