单链表
删除一个节点
插入一个节点
Message的插入操作
根据when确定位置
图5
如图5为MessageQueue的删除操作:当头节点不为null,前节点的next赋值为当前节点的next;头节点为null,直接赋值为当前节点的next。最后当前节点的next赋值为null,等待gc
例子麻将:如下图,从服务器传过来的是无序的一副牌,过会再翻开变成有序的一副牌,此处要分析的就是从无序到有序的一个过程。经过第一次处理,分为9组,九个链表;第二次处理,按照花色分组得到三个链表,再将它们一个个连起来就得到最后结果了
第一次处理的关键代码:
LinkedList[] rankList=new LinkedList[9];
for (int i=0;i
rankList[i]=new LinkedList();
}
//把数据一个个放到对应的组中
while (list.size() >0) {
//取一个
Mahjong m=list.remove();
//放到组中
rankList[m.rank-1].add(m);
}
//把九组合并在一起
for (int i=0;i
list.addAll(rankList[i]);
}