Summary
- プログラム=データの操作(データの入力→操作→出力)
- データの効率的な操作は、データを適切な形で(=データ構造)適切な仕方で(=アルゴリズム)で処理することにより達成される。
 
 - アルゴリズムの評価指標=計算量(complexity)
- 計算量の種別
- 時間計算量(time complexity):処理の速度
 - 領域計算量(space complexity):必要なメモリ領域
 
 - 時間と空間のトレードオフ=以下のトレードオフ
- 遅いがメモリをあまり消費しないアルゴリズム
 - 早いがメモリをたくさん消費するアルゴリズム
 
 - 計算量の入力データの種別
- 最大計算量(worst-case complexity)←最大の入力データ(普通はこれ)
 - 平均計算量(expected complexity)←全入力データに対する計算量の平均
 
 
 - 計算量の種別
 - データ構造に関連する基本用語
- データ型(data type):データの扱い方を規定する形式
 - 抽象データ型(abstract data type):データ型+そのデータ型のデータに対する操作(※inheritanceとpolymorphismの要素を除外したclassと同義)
 - データ構造(data structure):抽象データ型におけるデータ型を具体的に表現したもの
 
 - 「データ型(data type)」の分類
- primitive
- numeric
- integral
 - floating point
 
 - boolean
 
 - numeric
 - reference
- class
 - interface
 - array
 
 
 - primitive
 - ラッパークラス(wrapper class)=プリミティブ型を包み込んでオブジェクト(= reference型)として扱えるようにしてくれるクラス
- ボクシング変換(boxing conversion):プリミティブ型→ラッパークラス
- 例:int→Integer
 - 自動変換:Integer x = 100;
 - 手動変換:Integer x = new Integer(100);
 
 - アンボクシング変換(unboxing conversion):ラッパークラス→プリミティブ型
- 例:Integer→int
 - 自動変換:int a = x;
 - 自動変換:int a = x.intValue();
 
 
 - ボクシング変換(boxing conversion):プリミティブ型→ラッパークラス
 - プリミティブ型(primitive型)と参照型(reference型)の違い
- プリミティブ型:変数には値が直接入っている
 - 参照型:変数には参照値(=オブジェクトのポインタ)が入っている
 
 - shallow copyとdeep copy
- shallow copy:オブジェクトの複製時に参照をそのままコピー
 - deep copy:オブジェクトの複製時に参照先の値まで含めてコピー
- 補足:clone()メソッドはshallow copy
 
 
 - オブジェクトの同一性と等値性
- 同一性:参照値が等しい(==演算子・!=演算子)
 
- 等値性:値が意味的に等しい(equalsメソッド)
- 補足:異なる変数が別々の場所に格納された3という値を参照することがあり得る。
 
 
 - referenceを実例で理解する
- int[] array; //配列への参照を型として持つ変数arrayが確保されるが、配列の実体は生成されておらず、従ってそのメモリアドレスも格納されていない。
 - int[] array = new int[100]; //int型の要素100個から成る配列が生成され、その配列のポインタが変数arrayに代入されている。
 
 - ジェネリクス(generics)
- List<String>のように<>の記号を用いてクラスやメソッドの「型パラメータ(type parameter)」を指定できる機能(Jaba1.4で追加される以前は全てObject型だったのでその都度型キャストする必要があった)
 
 - 「データ構造(data structure)」の分類
- linear
- array(≒list)
 - stack
 - queue
 - linked list
- singly linked list
 
- doubly linked list
 - circular linked list
 
 
 - non-linear
- tree
 - graph
 
 
 - linear
 - 「データ構造(data structure)」の分類(解説付)
- linear
- array(≒list):順序付けられた要素の集合
 - stack:LIFOに従う(=先頭のみ挿入・削除される)リスト
 - queue:FIFOに従う(=先頭のみ削除・末端のみ挿入される)リスト
- 補足:店の行列などと一緒
 
 - linked list:別の要素とリンク(link)によってつながった構造を持つリスト
- singly linked list:前の要素が次の要素へのリンクを持つリスト
 - doubly linked list:前後の要素が相互に繋がったリスト
 - circular linked list:最後の要素のリンクがnullではなく、先頭の要素を示すようなリスト
 
 
 - non-linear
- tree:階層型のデータ構造
 - graph:nodes同士がedgeによって繋がったデータ構造
 
 
 - linear
 
