Moin, ich würde gerne wissen, ob dies die einfachste und zugleich schnellste Art ist, um einen Long-Ringpuffer in Java zu erstellen...
Es soll gezählt werden, ob es mehr als X (fest) Zugriffe innerhalb der letzten 2 Minuten gab... für ca. 20000 Elemente (deshalb sollte dafür nicht all zu viel Zeit verbraten werden):
Es soll gezählt werden, ob es mehr als X (fest) Zugriffe innerhalb der letzten 2 Minuten gab... für ca. 20000 Elemente (deshalb sollte dafür nicht all zu viel Zeit verbraten werden):
Java:
private static boolean hitAndCheck(long[] seenAt) {
final int hitLimit = 20;
if (seenAt == null || seenAt.length < hitLimit) {
return false;
}
long currentTime = System.currentTimeMillis();
long threshold = currentTime - (1000 * 120);
int size = 1;
for (int i = 0; i < seenAt.length; i++) {
if (seenAt[i] < threshold) {
seenAt[i] = 0;
} else if (seenAt[i] != 0) {
size++;
}
}
Arrays.sort(seenAt);
seenAt[0] = currentTime;
if (size >= hitLimit) {
logger.warn("Hit limit exceeded: {} at {}", hitLimit, currentTime);
return true;
}
return false;
}