This is an automated email from the ASF dual-hosted git repository. marklau99 pushed a commit to branch IOTDB-3709 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 79d7cfe584c71046207adc6a57df0b6b432767eb Author: Liu Xuxin <[email protected]> AuthorDate: Thu Jun 30 22:00:02 2022 +0800 rewrite some methods in TsFileResourceList according to LinkedList in JDK --- .../db/engine/storagegroup/TsFileResourceList.java | 94 ++++++++++++---------- 1 file changed, 53 insertions(+), 41 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java index 091d8f180e..f48b2bc6da 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/TsFileResourceList.java @@ -43,21 +43,20 @@ public class TsFileResourceList implements List<TsFileResource> { /** * Insert a new node before an existing node * - * @param node the existing node + * @param succ the existing node * @param newNode the file to insert */ - public void insertBefore(TsFileResource node, TsFileResource newNode) { - if (newNode.equals(node)) { + public void insertBefore(TsFileResource succ, TsFileResource newNode) { + if (newNode.equals(succ)) { return; } - newNode.prev = node.prev; - newNode.next = node; - if (node.prev == null) { + TsFileResource pred = succ.prev; + succ.prev = newNode; + if (pred == null) { header = newNode; } else { - node.prev.next = newNode; + pred.next = newNode; } - node.prev = newNode; count++; } @@ -68,12 +67,13 @@ public class TsFileResourceList implements List<TsFileResource> { * @param newNode the file to insert */ public void insertAfter(TsFileResource node, TsFileResource newNode) { + TsFileResource p = node.next; newNode.prev = node; newNode.next = node.next; - if (node.next == null) { + if (p == null) { tail = newNode; } else { - node.next.prev = newNode; + p.prev = newNode; } node.next = newNode; count++; @@ -122,13 +122,14 @@ public class TsFileResourceList implements List<TsFileResource> { // this node already in a list return false; } - if (tail == null) { + final TsFileResource t = tail; + tail = newNode; + if (t == null) { header = newNode; - tail = newNode; - count++; } else { - insertAfter(tail, newNode); + t.next = newNode; } + count++; return true; } @@ -191,37 +192,40 @@ public class TsFileResourceList implements List<TsFileResource> { */ @Override public boolean remove(Object o) { - TsFileResource tsFileResource = (TsFileResource) o; - if (!contains(o)) { - // the tsFileResource does not exist in this list + if (!(o instanceof TsFileResource)) { return false; } - if (tsFileResource.prev == null) { - // remove header - header = header.next; - if (header != null) { - header.prev = null; - } else { - // if list contains only one item, remove the header and the tail - tail = null; - } - } else if (tsFileResource.next == null) { - // remove tail - tail = tail.prev; - if (tail != null) { - tail.next = null; - } else { - // if list contains only one item, remove the header and the tail - header = null; + TsFileResource curr = header; + TsFileResource target = (TsFileResource) o; + while (curr != null) { + if (curr.equals(target)) { + unlink(target); + return true; } + curr = curr.next; + } + return false; + } + + private void unlink(TsFileResource x) { + TsFileResource next = x.next; + TsFileResource prev = x.prev; + + if (prev == null) { + header = next; + } else { + prev.next = next; + x.prev = null; + } + + if (next == null) { + tail = prev; } else { - tsFileResource.prev.next = tsFileResource.next; - tsFileResource.next.prev = tsFileResource.prev; + next.prev = prev; + x.next = null; } - tsFileResource.prev = null; - tsFileResource.next = null; + count--; - return true; } @Override @@ -243,6 +247,14 @@ public class TsFileResourceList implements List<TsFileResource> { @Override public void clear() { + TsFileResource curr = header; + TsFileResource next; + while (curr != null) { + curr.prev = null; + next = curr.next; + curr.next = null; + curr = next; + } header = null; tail = null; count = 0; @@ -296,13 +308,13 @@ public class TsFileResourceList implements List<TsFileResource> { public TsFileResource set(int index, TsFileResource element) { int currIndex = 0; TsFileResource currTsFileResource = header; - if (header == null && index > 0) { + if (index >= count) { throw new ArrayIndexOutOfBoundsException(index); } while (currIndex != index) { if (currTsFileResource.next == null) { if (currIndex == index - 1) { - insertAfter(currTsFileResource, element); + add(element); return element; } else { throw new ArrayIndexOutOfBoundsException(currIndex);
