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<E> 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<E> subList(int fromIndex, int toIndex) {
subListRangeCheck(fromIndex, toIndex, size);
return new SubList(0, fromIndex, toIndex);
}
And SubList.subList:
public List<E> 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