RFR: 8079136: Accessing a nested sublist leads to StackOverflowError (original) (raw)
Ivan Gerasimov ivan.gerasimov at oracle.com
Tue May 5 18:02:31 UTC 2015
- Previous message: RFR: 8079136: Accessing a nested sublist leads to StackOverflowError
- Next message: RFR: 8079136: Accessing a nested sublist leads to StackOverflowError
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Paul
On 05.05.2015 19:56, Paul Sandoz wrote:
Hi Ivan,
ArrayList -- You can simplify SubList with: private final class SubList extends AbstractList implements RandomAccess { private final SubList parent; private final int offset; int size; // Top level sub-list SubList(int offset, int fromIndex, int toIndex) { this.parent = null; this.offset = offset + fromIndex; this.size = toIndex - fromIndex; this.modCount = ArrayList.this.modCount; } // Sub sub-lst SubList(SubList parent, int offset, int fromIndex, int toIndex) { this.parent = parent; this.offset = offset + fromIndex; this.size = toIndex - fromIndex; this.modCount = ArrayList.this.modCount; } ArrayList.subList becomes: public List subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(0, fromIndex, toIndex); } And SubList.subList: public List subList(int fromIndex, int toIndex) { subListRangeCheck(fromIndex, toIndex, size); return new SubList(this, offset, fromIndex, toIndex); } And SubList. updateSizeAndModCount: private void updateSizeAndModCount(int sizeChange) { int modCount = ArrayList.this.modCount; for (SubList slist = this; slist != null; slist = slist.parent) { slist.size += sizeChange; slist.modCount = modCount; } } Thanks for suggestion! I should have realized this myself, that there's no need to set parent to ArrayList.this. It was a left-over from the previous design, when parent was used in different ways.
AbstractList --
Similar changes can be made as above to ArrayList.SubList etc. The construction of sub-lists does indeed require a second take. A comment is worthwhile. IMO such scoping is not necessary for ArrayList, i have actually found it rare to require such scoping so using it when not necessary is rather jarring. Okay, I'll reorganize it to make SubList classes stand-alone, not inner classes. Let's see, if it makes the things nicer.
NestedSubList --
My preference is you use a testng data provider so you don't have to roll your own failure checking and reporting. Are there any other tests for testing the integrity of sublists?
I found only a few tests that test some parts of the functionality: test/java/util/List/LockStep.java test/java/util/Collection/MOAT.java
I'll post an update on the code and test soon.
Sincerely yours, Ivan
- Previous message: RFR: 8079136: Accessing a nested sublist leads to StackOverflowError
- Next message: RFR: 8079136: Accessing a nested sublist leads to StackOverflowError
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]