線形テーブルは、最も基本的かつ単純で、最も一般的に使用されるデータ構造です。同じ特性を持つ n 個のデータ要素を含む有限シーケンスは線形リストと呼ばれ、データ構造の一種です。
一般的な線形リスト: シーケンシャル リスト、リンク リスト、スタック、キュー...
線形リストは論理的に線形な構造、つまり連続した直線です。線形テーブルの物理的な記憶形式は通常、配列またはリンク リスト構造ですが、必ずしも連続的であるとは限りません。
#セット内には「最初の要素」が 1 つだけ存在する必要があります。
セットには「最後の要素」が 1 つだけ存在する必要があります。
最後の要素を除き、すべての要素には一意のサクセサ (サクセサ) があります。
最初の要素を除き、すべての要素には一意の先行要素 (先行要素) があります。
通常、配列の形式で格納される線形構造はシーケンス テーブルと呼ばれ、データ要素が格納されます。連続したアドレスを持つ物理メモリセル内で順番に。アレイ上のデータの追加、削除、確認、変更を完了します。
まず、データを保存する配列を作成する必要があります。
注: 便宜上、最初に整数配列を作成したため、さまざまな型に適切に適応するために、ここでは使用していない汎用配列を作成できます。 。 書きました。
#次のステップは、シーケンス テーブルに対してさまざまな操作を実行することです。例: 基本的な CURD、シーケンス テーブルの印刷、シーケンス テーブルの長さの取得、シーケンス テーブルのクリアなど。 配列の印刷これは配列であるため、配列を走査して直接印刷するだけです 新しい要素を追加します 要素を追加する際には、配列がいっぱいかどうかを考慮する必要があるため、判断する必要があり、配列の領域がいっぱいの場合は、拡張する必要があります。さらに、この位置が合法であるかどうかも判断する必要があります。 スペースがいっぱいかどうかを判断する方法 ここでは、コードを次のように簡略化します。 #ご希望の場合 展開の場合、展開完了後、配列リストは連続構造のため、pos位置に新たな要素を追加すると、pos位置以降の要素が順番に戻ります。この方法でのみ新しい要素を追加できます。 注: 拡張後、CAPACITY と usedSize のサイズを変更する必要があります。 特定の要素が含まれているかどうかを判断するここでは、現時点で配列が空であるかどうかを考慮する必要があります。
その後は、引き続き配列の直接走査が行われます。#要素の検索
ここでは null 操作も必要です。
配列が空で pos が不正な状況が発生する可能性があるため、判断が必要です。
ここでは手動で例外をスローしていますが、他には何も書いていません。
pos 位置の値を変更します
削除操作
コレクション フレームワークでは、ArrayList は List インターフェイスを実装する通常のクラスであり、具体的なフレームワーク図は次のとおりです:
[説明]
ArrayList は RandomAccess インターフェイスを実装しており、ArrayList がランダム アクセスをサポートしていることを示します。
ArrayList は Cloneable インターフェイスを実装し、ArrayList を複製できることを示します。
ArrayList は Serializable インターフェイスを実装し、ArrayList がシリアル化をサポートしていることを示します。
Vector とは異なり、ArrayList はスレッドセーフではなく、単一スレッドで使用できます。マルチスレッドでは、Vector または CopyOnWriteArrayList を選択できます。
ArrayList の最下層は連続空間で動的に展開可能な動的型の配列リストです。
public static void main(String[] args) { // ArrayList创建,推荐写法 // 构造一个空的列表 List<Integer> list1 = new ArrayList<>(); // 构造一个具有10个容量的列表 List<Integer> list2 = new ArrayList<>(10); list2.add(1); list2.add(2); list2.add(3); // list2.add("hello"); // 编译失败,List<Integer>已经限定了,list2中只能存储整形元素 // list3构造好之后,与list中的元素一致 ArrayList<Integer> list3 = new ArrayList<>(list2); // 避免省略类型,否则:任意类型的元素都可以存放,使用时将是一场灾难 List list4 = new ArrayList(); list4.add("111"); list4.add(100); }
説明 | |
End insert e | |
will e はインデックス位置に挿入されます | |
コレクション c の要素の末尾をコレクションに挿入します | |
##boolean Remove(Object o) | |
E get(intindex) | |
E set(int index, E element) | |
void clear() | |
boolean contains(Object o) | |
intindexOf(Object o) | |
#int lastIndexOf(Object o)の添え字を返します | 最後の o |
##List subList(int fromIndex, int toIndex) | リストの一部のインターセプト |
ArrayList traversal | Loop traversal |
##Iterator
System.out.println("======迭代器1========="); ElementObservableListDecorator<Object> list; Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); } System.out.println("======迭代器2========="); ListIterator<String> it2 = list.listIterator(); while (it2.hasNext()) { System.out.println(it2.next()); }シーケンス テーブルとの違い配列間: 上で述べたように、シーケンス テーブルの最下層は配列として理解できますが、配列よりも高度です。 シーケンス テーブルは単独で拡張可能;
シーケンス テーブルは配列の容量と要素の数を厳密に区別します。
つまり、配列は実際には不完全なシーケンス リストです。シーケンス テーブルの注意:
シーケンス テーブルでは、容量と要素数 (サイズ) という 2 つの概念を区別する必要があります。 )。容量は配列のサイズ (長さ) として理解でき、要素数はサイズに記録された有効な要素の数です。
以上がJava で ArrayList とシーケンス リストを定義および実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。