链表
- 单链表 Message,MessageQueue
- 单循环链表
- 双链表
- 双向循环链表 LinkedList
优点:插入删除快
缺点:不支持随机访问
##MessageQueue
插入:enqueueMessage(),按照时间顺序插入
删除:next()
整理麻将牌
Mahjong.Class
/**
* @author CSY
* Created by CSY on 2019/1/28.
*/
public class Mahjong {
public int type;//1筒,2点,3条
public int rank;//点数1~9
public Mahjong(int type, int rank) {
this.type = type;
this.rank = rank;
}
@Override
public String toString() {
return "Mahjong{" +
"type=" + type +
", rank=" + rank +
'}';
}
}
ExampleUnitTest.class
public class ExampleUnitTest {
@Test
public void testMahjong() {
LinkedList<Mahjong> linkedList = new LinkedList<>();
linkedList.add(new Mahjong(1, 2));
linkedList.add(new Mahjong(2, 5));
linkedList.add(new Mahjong(3, 3));
linkedList.add(new Mahjong(3, 4));
linkedList.add(new Mahjong(2, 5));
linkedList.add(new Mahjong(2, 6));
linkedList.add(new Mahjong(3, 7));
linkedList.add(new Mahjong(1, 2));
linkedList.add(new Mahjong(1, 3));
linkedList.add(new Mahjong(2, 9));
linkedList.add(new Mahjong(1, 3));
linkedList.add(new Mahjong(3, 2));
linkedList.add(new Mahjong(1, 1));
sortMahjong(linkedList);
//输出linkedlist
for (int i = 0; i < linkedList.size(); i++) {
System.out.println(linkedList.get(i).toString());
}
}
public void sortMahjong(LinkedList<Mahjong> linkedList) {
//先对点数分组,9种点数
LinkedList[] linkedLists = new LinkedList[9];
//初始化数组
for (int i = 0; i < linkedLists.length; i++) {
linkedLists[i] = new LinkedList();
}
while (linkedList.size() > 0) {
Mahjong m = linkedList.remove();
linkedLists[m.rank - 1].add(m);
}
for (int i = 0; i < linkedLists.length; i++) {
linkedList.addAll(linkedLists[i]);
}
//得到了九个linkedlist,再对花色分类
LinkedList[] typeLists = new LinkedList[3];
//初始化数组
for (int i = 0; i < typeLists.length; i++) {
typeLists[i] = new LinkedList();
}
while (linkedList.size() > 0) {
Mahjong m = linkedList.remove();
typeLists[m.type - 1].add(m);
}
for (int i = 0; i < typeLists.length; i++) {
linkedList.addAll(typeLists[i]);
}
}
}
运行testMahjong()方法得到
Mahjong{type=1, rank=1}
Mahjong{type=1, rank=2}
Mahjong{type=1, rank=2}
Mahjong{type=1, rank=3}
Mahjong{type=1, rank=3}
Mahjong{type=2, rank=5}
Mahjong{type=2, rank=5}
Mahjong{type=2, rank=6}
Mahjong{type=2, rank=9}
Mahjong{type=3, rank=2}
Mahjong{type=3, rank=3}
Mahjong{type=3, rank=4}
Mahjong{type=3, rank=7}
牌有序了。
同理,也可以先排花色,再排点数
整理牌的方法是空间换时间