应用场景:消息接收去重
消息持续接收,在处理之前先去看是否已经在循环列表存有,存在就舍弃,否则,保存该消息id到循环列表
优点:新的消息总会按顺序占用下标,覆盖最久缓存的数据
使用 增长序列 取余的方式 实现最早存放最先覆盖 的循环列表
即存放数据 的列表下标 顺序是 0,1,2,0,1,2........
import java.util.Arrays;
import java.util.List;
import java.util.Random;
/**
* 循环列表的实现方式
*
* 应用场景:消息接收去重
* 消息持续接收,在处理之前先去看是否已经在循环列表存有,存在就舍弃,否则,保存该消息id到循环列表
*
* 优点:新的消息总会按顺序占用下标,覆盖最久缓存的数据
*
* @author Tan
* @version V1.0
* @description: MainTest
* @date 2019/9/12
*/
public class MainTest {
public static Integer MAX = 10;
public static List<String> msgIds = Arrays.asList(new String[MAX]);
public static Short MAX_SHORT = Short.MAX_VALUE;
public static void main(String[] args) {
for (int i = 0; i <= 100; i++) {
int intUnbounded = new Random().nextInt(20);
String msgId = "zhan" + intUnbounded;
if (msgIds.contains(msgId) == false) {
msgIds.set(MAX_SHORT % MAX, msgId);
MAX_SHORT++;
if (MAX_SHORT < 0) {
MAX_SHORT = 0; //因为Short最大值再加1就是负最大,这里为了保证为自然数
}
} else {
System.out.println(msgId + "已存在");
}
System.out.println(msgIds);
}
}
}