Java : AbstractList - API使用例
AbstractList (Java SE 18 & JDK 18) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。
概要
必要最低限の独自実装の例です。
class MyList extends AbstractList<String> {
private final String[] values;
MyList(String[] values) {
this.values = Objects.requireNonNull(values);
}
@Override
public String get(int index) {
return values[index];
}
@Override
public int size() {
return values.length;
}
}
final var list = new MyList(new String[]{"aaa", "bbb", "ccc"});
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false
System.out.println("-- values --");
for (final var value : list) {
System.out.println(value);
}
// 結果
// ↓
//-- values --
//aaa
//bbb
//ccc
関連記事:List(リスト)の基本
フィールド
protected int modCount
class MyList extends AbstractList<String> {
private final int MAX_SIZE = 5;
private final String[] values = new String[MAX_SIZE];
private int size;
@Override
public String get(int index) {
return values[index];
}
@Override
public int size() {
return size;
}
@Override
public boolean add(String s) {
if (size == MAX_SIZE) {
throw new IllegalStateException();
}
size++;
modCount++;
values[size - 1] = s;
return true;
}
}
final var list = new MyList();
list.add("aaa");
list.add("bbb");
{
final var iterator = list.iterator();
System.out.println("-- iterator --");
iterator.forEachRemaining(s -> {
System.out.println(s);
});
// 結果
// ↓
//-- iterator --
//aaa
//bbb
}
{
final var iterator = list.iterator();
list.add("ccc");
try {
System.out.println("-- iterator --");
iterator.forEachRemaining(s -> {
System.out.println(s);
});
} catch (ConcurrentModificationException e) {
System.out.println("ConcurrentModificationException!");
}
// 結果
// ↓
//-- iterator --
//ConcurrentModificationException!
}
コンストラクタ
AbstractList ()
class MyList extends AbstractList<String> {
private final String[] values;
MyList(String[] values) {
this.values = Objects.requireNonNull(values);
}
@Override
public String get(int index) {
return values[index];
}
@Override
public int size() {
return values.length;
}
}
final var list = new MyList(new String[]{"aaa", "bbb", "ccc"});
System.out.println(list); // [aaa, bbb, ccc]
System.out.println(list.size()); // 3
System.out.println(list.isEmpty()); // false
System.out.println("-- values --");
for (final var value : list) {
System.out.println(value);
}
// 結果
// ↓
//-- values --
//aaa
//bbb
//ccc
メソッド
void add (int index, E element)
final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
list.add(0, "A");
System.out.println(list); // [A, a, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
list.add(1, "B");
System.out.println(list); // [a, B, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
list.add(2, "C");
System.out.println(list); // [a, b, C, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
list.add(3, "D");
System.out.println(list); // [a, b, c, D]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
//list.add(4, "D"); // IndexOutOfBoundsException
}
boolean add (E e)
final AbstractList<String> list = new ArrayList<>();
System.out.println(list); // []
System.out.println(list.add("a")); // true
System.out.println(list); // [a]
System.out.println(list.add("b")); // true
System.out.println(list); // [a, b]
System.out.println(list.add("c")); // true
System.out.println(list); // [a, b, c]
boolean addAll (int index, Collection<? extends E> c)
final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.addAll(0, List.of("A1", "A2"))); // true
System.out.println(list); // [A1, A2, a, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.addAll(1, List.of("B1", "B2", "B3"))); // true
System.out.println(list); // [a, B1, B2, B3, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.addAll(2, List.of("C1", "C2", "C3", "C4"))); // true
System.out.println(list); // [a, b, C1, C2, C3, C4, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.addAll(3, List.of())); // false
System.out.println(list); // [a, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
//list.addAll(4, List.of("E")); // IndexOutOfBoundsException
}
final var src = List.of("a", "b", "c");
System.out.println(src);// [a, b, c]
final AbstractList<String> list = new ArrayList<>(src);
// Setは順序が保証されません。
System.out.println(list.addAll(3, Set.of("D1", "D2", "D3"))); // true
System.out.println(list); // [a, b, c, D3, D2, D1]
void clear ()
final AbstractList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list); // [a, b, c]
list.clear();
System.out.println(list); // []
boolean equals (Object o)
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]
System.out.println(list.equals(List.of("a"))); // false
System.out.println(list.equals(List.of("a", "b"))); // false
System.out.println(list.equals(List.of("a", "b", "c"))); // true
System.out.println(list.equals(List.of("c", "b", "a"))); // false
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]
final var arrayList = new ArrayList<>(list);
System.out.println(arrayList); // [a, b, c]
System.out.println(list.equals(arrayList)); // true
final var linkedList = new LinkedList<>(list);
System.out.println(linkedList); // [a, b, c]
System.out.println(list.equals(linkedList)); // true
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]
// List以外はfalse
final var set = new LinkedHashSet<>();
set.add("a");
set.add("b");
set.add("c");
System.out.println(set); // [a, b, c]
System.out.println(list.equals(set)); // false
abstract E get (int index)
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c");
System.out.println(list); // [a, b, c]
//list.get(-1); // IndexOutOfBoundsException
System.out.println(list.get(0)); // a
System.out.println(list.get(1)); // b
System.out.println(list.get(2)); // c
//list.get(3); // IndexOutOfBoundsException
final AbstractList<Integer> list = new ArrayList<>();
Collections.addAll(list, 10, 20, 30, 40);
System.out.println(list); // [10, 20, 30, 40]
System.out.println(list.get(0)); // 10
System.out.println(list.get(1)); // 20
System.out.println(list.get(2)); // 30
System.out.println(list.get(3)); // 40
int hashCode ()
final AbstractList<String> list1 = new ArrayList<>();
Collections.addAll(list1, "a", "b", "c");
System.out.println(list1.hashCode()); // 126145
final AbstractList<String> list2 = new ArrayList<>();
Collections.addAll(list2, "A", "B", "C");
System.out.println(list2.hashCode()); // 94369
final AbstractList<Integer> list3 = new ArrayList<>();
Collections.addAll(list3, 1, 2, 3);
System.out.println(list3.hashCode()); // 30817
int indexOf (Object o)
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]
System.out.println(list.indexOf("")); // -1
System.out.println(list.indexOf("a")); // 0
System.out.println(list.indexOf("b")); // 1
System.out.println(list.indexOf("c")); // 2
System.out.println(list.indexOf("d")); // -1
System.out.println(list.indexOf("abc")); // -1
Iterator<E> iterator ()
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.iterator();
iterator.forEachRemaining(System.out::println);
// 結果
// ↓
//aaa
//bbb
//ccc
int lastIndexOf (Object o)
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "a", "b", "c");
System.out.println(list); // [a, b, c, a, b, c]
System.out.println(list.lastIndexOf("")); // -1
System.out.println(list.lastIndexOf("a")); // 3
System.out.println(list.lastIndexOf("b")); // 4
System.out.println(list.lastIndexOf("c")); // 5
System.out.println(list.lastIndexOf("d")); // -1
System.out.println(list.lastIndexOf("abc")); // -1
ListIterator<E> listIterator ()
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var listIterator = list.listIterator();
listIterator.forEachRemaining(System.out::println);
// 結果
// ↓
//aaa
//bbb
//ccc
ListIterator<E> listIterator (int index)
final AbstractList<String> list = new ArrayList<>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
{
final var ret = list.listIterator(0);
ret.forEachRemaining(System.out::println);
// 結果
// ↓
//aaa
//bbb
//ccc
}
{
final var ret = list.listIterator(1);
ret.forEachRemaining(System.out::println);
// 結果
// ↓
//bbb
//ccc
}
{
final var ret = list.listIterator(2);
ret.forEachRemaining(System.out::println);
// 結果
// ↓
//ccc
}
E remove (int index)
final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.remove(0)); // a
System.out.println(list); // [b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.remove(1)); // b
System.out.println(list); // [a, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.remove(2)); // c
System.out.println(list); // [a, b]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
//list.remove(3); // IndexOutOfBoundsException
}
protected void removeRange (int fromIndex, int toIndex)
class MyList extends ArrayList<String> {
MyList(Collection<String> c) {
super(c);
}
@Override
public void removeRange(int fromIndex, int toIndex) {
super.removeRange(fromIndex, toIndex);
}
}
final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(0, 1);
System.out.println(list); // [b, c]
}
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(0, 2);
System.out.println(list); // [c]
}
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(0, 3);
System.out.println(list); // []
}
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(1, 3);
System.out.println(list); // [a]
}
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(2, 3);
System.out.println(list); // [a, b]
}
{
final var list = new MyList(src);
System.out.println(list); // [a, b, c]
list.removeRange(3, 3);
System.out.println(list); // [a, b, c]
}
E set (int index, E element)
final var src = List.of("a", "b", "c");
System.out.println(src); // [a, b, c]
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.set(0, "A")); // a
System.out.println(list); // [A, b, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.set(1, "B")); // b
System.out.println(list); // [a, B, c]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
System.out.println(list.set(2, "C")); // c
System.out.println(list); // [a, b, C]
}
{
final AbstractList<String> list = new ArrayList<>(src);
System.out.println(list); // [a, b, c]
//list.set(3, "D"); // IndexOutOfBoundsException
}
List<E> subList (int fromIndex, int toIndex)
final AbstractList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
System.out.println(list); // [a, b, c, d]
System.out.println(list.subList(0, 0)); // []
System.out.println(list.subList(0, 1)); // [a]
System.out.println(list.subList(0, 2)); // [a, b]
System.out.println(list.subList(0, 3)); // [a, b, c]
System.out.println(list.subList(0, 4)); // [a, b, c, d]
//list.subList(0, 5); // IndexOutOfBoundsException
// サブリストの変更は、本体のリストにも反映されます。
final var subList = list.subList(1, 3);
System.out.println(subList); // [b, c]
System.out.println(list); // [a, b, c, d]
subList.set(0, "X");
System.out.println(subList); // [X, c]
System.out.println(list); // [a, X, c, d]
subList.add("Y");
System.out.println(subList); // [X, c, Y]
System.out.println(list); // [a, X, c, Y, d]
subList.remove("c");
System.out.println(subList); // [X, Y]
System.out.println(list); // [a, X, Y, d]
AbstractCollectionで宣言されたメソッド
addAll, contains, containsAll, isEmpty, remove, removeAll, retainAll, toArray, toArray, toString
「Java API 使用例 : AbstractCollection」をご参照ください。
Collectionで宣言されたメソッド
parallelStream, removeIf, stream, toArray
「Java API 使用例 : Collection」をご参照ください。
Iterableで宣言されたメソッド
forEach
「Java API 使用例 : Iterable」をご参照ください。
Listで宣言されたメソッド
addAll, contains, containsAll, isEmpty, remove, removeAll, replaceAll, retainAll, size, sort, spliterator, toArray, toArray
「Java API 使用例 : List」をご参照ください。
関連記事
- API 使用例
- Collection (コレクション)
- Collections (コレクション操作)
- Comparable
- Comparator
- Iterator
- List (リスト)
- Map (マップ)
- Map.Entry (キーと値のペア)
- Queue (キュー)
- AbstractQueue
- ArrayBlockingQueue (ブロッキング・配列キュー)
- ArrayDeque (両端キュー)
- BlockingDeque (ブロッキング・両端キュー)
- BlockingQueue (ブロッキング・キュー)
- ConcurrentLinkedDeque (並列処理用・両端キュー)
- ConcurrentLinkedQueue (並列処理用キュー)
- Deque (両端キュー)
- LinkedBlockingDeque (ブロッキング・リンク両端キュー)
- LinkedBlockingQueue (ブロッキング・リンクキュー)
- LinkedList (二重リンク・リスト)
- PriorityBlockingQueue (ブロッキング・優先度付きキュー)
- PriorityQueue (優先度付きキュー)
- RandomAccess
- Set (セット)
- Spliterator