IJDK Array Class
The most heavily used class from IJDK, possibly other than Str
, is Array
. This post compares the
implementations of common idioms, using the JDK java.util.ArrayList
and
org.incava.ijdk.collect.Array
classes.
Creating
Empty
ArrayList<Integer> list = new ArrayList<>();
// more explicit that the array is empty (but mutable);
// no need to use <> or <Integer>:
Array<Integer> ary = Array.empty();
With Elements
// Arrays.asList returns an immutable array, so ArrayList has to wrap it:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(3, 17, 212));
// how concise
Array<Integer> ary = Array.of(3, 17, 212);
list : [3, 17, 212]
ary : [3, 17, 212]
Accessing
Get
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(60, 16, 252, 9, 3, 17));
Array<Integer> ary = Array.of(60, 16, 252, 9, 3, 17);
Integer n;
n = list.size() > 0 ? list.get(list.size() - 1) : null;
// n : 17
n = list.size() > 0 ? list.get(list.size() - 2) : null;
// n : 3
n = list.size() >= 8 ? list.get(8) : null;
// n : null
n = list.size() > 8 ? list.get(list.size() - 8) : null;
// n : null
n = ary.get(-1);
// n : 17
n = ary.get(-2);
// n : 3
n = ary.get(8);
// n : null
n = ary.get(-8);
// n : null
Append (Add)
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(3, 7, 23, 50));
Array<Integer> ary = Array.of(3, 7, 23, 50);
list.add(2);
list.add(8);
list.add(6);
// list : [3, 7, 23, 50, 2, 8, 6]
// chaining appends:
ary.append(2).append(8).append(6);
// ary : [3, 7, 23, 50, 2, 8, 6]
First, Last
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(60, 16, 252, 9, 3, 17));
Array<Integer> ary = Array.of(60, 16, 252, 9, 3, 17);
Integer n;
n = list.size() > 0 ? list.get(0) : null;
// n : 60
n = ary.first();
// n : 60
n = list.size() > 0 ? list.get(list.size() - 1) : null;
// n : 17
n = ary.last();
println("n", n);
n = list.size() > 0 ? list.remove(0) : null;
println("n", n);
println("list", list);
n = ary.takeFirst();
println("n", n);
println("ary", ary);
n = list.size() > 0 ? list.remove(list.size() - 1) : null;
println("n", n);
println("list", list);
n = ary.takeLast();
println("n", n);
println("ary", ary);
We think in generalities, but we live in detail. – Alfred North Whitehead