JAVA とテンプレート

Similar documents
2. データ構造ヒープに保存するデータは 番号付けられて保存される 従って リスト L として保存することとする 3. アルゴリズム 3.1. 要素の追加新しい要素の追加は リストの終端に置くことで開始する つまり 最下層の一番右 または新たに最下層を生成してその一番左となる この後 この要素を正し

1. はじめに 二分木ヒープ 様々なアルゴリズムにおいて ある要素の集合またはリストから 最小 な要素を取り 出す必要がある そのような場合に使われる標準的データ構造が二分木ヒープ (binary heap) である あるオブジェクトO を考える そのオブジェクトは ラベル O. label と値

二分木ヒープとは 集合 リストから 最小な 要素を取り出す 二分木ヒープは そのための標準的データ構造 二分木ヒープを保存するデータ構造 二分木ヒープの操作のメソッド 対象となるデータクラス 識別のためのlabelフィールド 値を保持するvalueフィールド

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

文字列操作と正規表現

今回の内容 グラフとオブジェクト指向プログラミング Java を使う理由 Java の基本 Javaのライブラリ 開発 実行 クラスの再利用 クラス継承 抽象クラス 開発の要点

CollectionsとLambda式

Quick Sort 計算機アルゴリズム特論 :2017 年度 只木進一

シミュレーションの簡単な例 GUI 無しのシミュレーションを作る GUI を作る パラメタを設定するデモンストレーションをする 2 オブジェクト指向プログラミング特論

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Microsoft PowerPoint ppt

グラフと組み合わせ 課題 7 ( 解答例 ) 2013/5/27 1 列挙 n 個の文字の集合 { } S = a, a,, an の全てからなる文字列 つまり同じ文字を含まない 長さ n の文字列を列挙する 方法を考える 1. 何通りの文字列があるかを答えなさい また そのことが正しい

グラフの探索 JAVA での実装

JAVA入門

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

Java (5) 1 Lesson 3: x 2 +4x +5 f(x) =x 2 +4x +5 x f(10) x Java , 3.0,..., 10.0, 1.0, 2.0,... flow rate (m**3/s) "flow

ALG ppt

新・明解Java入門

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

問題1 以下に示すプログラムは、次の処理をするプログラムである

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

グラフを表すデータ構造 Javaでの実装

untitled

JAVA入門

ただし 無作為にスレッドを複数実行すると 結果不正やデッドロックが起きる可能性がある 複数のスレッド ( マルチスレッド ) を安全に実行する ( スレッドセーフにする ) ためには 同期処理を用いるこ とが必要になる 同期処理は 予約語 synchronized で行うことができる ここでは sy

6-1

DVIOUT-exer

JavaプログラミングⅠ

Microsoft PowerPoint - prog03.ppt

Java講座

アルゴリズムとデータ構造1

PowerPoint プレゼンテーション

デジタル表現論・第4回

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

JavaプログラミングⅠ


PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Java言語 第1回

Microsoft PowerPoint - chap10_OOP.ppt

Javaセキュアコーディングセミナー東京 第3回 入出力(File, Stream)と例外時の動作 演習解説

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

Java (7) Lesson = (1) 1 m 3 /s m 2 5 m 2 4 m 2 1 m 3 m 1 m 0.5 m 3 /ms 0.3 m 3 /ms 0.6 m 3 /ms 1 1 3

プログラミング基礎I(再)

基本情報STEP UP演習Java対策

Sort-of-List-Map(A)

10K pdf

: : : TSTank 2

K227 Java 2

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

微分方程式 モデリングとシミュレーション

JAVA入門

ALG ppt

** 平成 16 年度 FE 午後問題 Java** 示現塾プロジェクトマネージャ テクニカルエンジニア ( ネットワーク ) など各種セミナーを開催中!! 開催日 受講料 カリキュラム等 詳しくは 今すぐアクセス!! 平成 16

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Microsoft Word - keisankigairon.ch doc

JavaプログラミングⅠ

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

人工知能入門

やさしいJavaプログラミング -Great Ideas for Java Programming サンプルPDF

Microsoft PowerPoint - prog04.ppt

oop1

2016 年度 JAVA 講座第六週目 目次 パッケージ... 2 パッケージの作成... 2 パッケージの使用方法... 3 異なるパッケージ同名クラスの宣言... 4 パッケージの側面から見たアクセス修飾子... 4 ラッパークラス... 5 ラッパークラス利用法:キャスト... 5 ラッパーク

問題1 以下に示すプログラムは、次の処理をするプログラムである

5 p Point int Java p Point Point p; p = new Point(); Point instance, p Point int 2 Point Point p = new Point(); p.x = 1; p.y = 2;

ALG2012-A.ppt

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

Java演習(2) -- 簡単なプログラム --

JavaプログラミングⅠ

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

メディプロ1 Javaプログラミング補足資料.ppt

Javaの作成の前に

Prog2_9th

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

r1.dvi

オブジェクト指向プログラミング・同演習 5月21日演習課題

PowerPoint プレゼンテーション

Microsoft PowerPoint - OOP.pptx

JavaプログラミングⅠ

ガイダンス

Method(C 言語では関数と呼ぶ ) メソッドを使うと 処理を纏めて管理することができる 処理 ( メソッド ) の再実行 ( 再利用 ) が簡単にできる y 元々はC 言語の関数であり 入力値に対する値を 定義するもの 数学では F(x) = 2x + 1 など F(x)=2x+1 入力値 (

PowerPoint Presentation

Microsoft PowerPoint - Pro110111

ガイダンス

Prog1_15th

Prog1_10th

(Microsoft PowerPoint - \223\306\217KJAVA\221\346\202R\224\ ppt)

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

Microsoft PowerPoint - ●SWIM_ _INET掲載用.pptx

デジタル表現論・第6回

Java プログラミング Ⅰ 3 回目変 数 今日の講義講義で学ぶ内容 変数とは 変数の使い方 キーボード入力の仕方 変 数 変 数 一時的に値を記憶させておく機能 変数は 型 ( データ型 ) と識別子をもちます 2 型 ( データ型 ) 変数に記憶する値の種類変数の型は 記憶できる値の種類と範囲

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

JavaプログラミングⅠ

< F2D B838A835882CC8CF68EAE2E6A7464>

Microsoft Word - NonGenTree.doc

2

解きながら学ぶJava入門編

ALG2012-C.ppt

Week 1 理解度確認クイズ解答 解説 問題 1 (4 2 点 =8 点 ) 以下の各問いに答えよ 問題 bit 版の Windows8.1 に Java をインストールする時 必要なパッケージはどれか 但し Java のコンパイルができる環境をインストールするものとする 1. jdk

Transcription:

JAVA とテンプレート

序論 : コンテナ 他のクラスのオブジェクトを保存するものをコンテナ (Container) と呼ぶ 集合 リスト 表 コンテナに求められる機能 追加 削除 参照 要素の比較 並べ替え 要素のクラスが不明では 比較できない 要素が想定しているクラスのものかの判定

テンプレート以前の対応方法 コンテナ設計時に 保存されるクラスを特定してコンテナをコードする 保存されるクラスごとに作成しなければならない 再利用可能性が下がる 最上位クラスのオブジェクトを保存するものとしてコードする 想定外のオブジェクトを排除できない 大小関係を比較できない 比較するためのインターフェイスを実装したオブジェクトを保存するものとしてコードする 想定外のオブジェクトを排除できない

JAVA5 以前のコンテナ private List list; private SortedSet sortedset; list = Collections.synchronizedList(new ArrayList()); sortedset = Collections.synchronizedSortedSet(new TreeSet()); /** sortedset の中身をリストに変換 */ List sortedlist = Collections.synchronizedList(new ArrayList()); while(!sortedset.isempty()){ /** sortedset から何が出てくるか不明なため Object のインスタンスになる */ Object first = sortedset.first(); sortedset.remove(first); sortedlist.add((integer)first);

JAVA5 以降のコンテナ : テンプレート使用 private List<Integer> list; private SortedSet<Integer> sortedset; コンテナの要素となるクラスを指定 list = Collections.synchronizedList(new ArrayList<Integer>()); sortedset = Collections.synchronizedSortedSet(new TreeSet<Integer>()); List<Integer> sortedlist = Collections.synchronizedList(new ArrayList<Integer>()); while(!sortedset.isempty()){ /** sortedset から Integer 出てくるのが明か */ Integer first = sortedset.first(); sortedset.remove(first); sortedlist.add(first);

テンプレートを使用したコンテナの利点 コンパイル時に定義と要素の整合性を確認 取り出した要素を想定されるクラスにキャストする必要がない 要素を追加する際にもキャストする必要がない

テンプレートの活用 : メソッド public static <T extends Comparable<T>> void sort(t t[]) { for (int i = t.length; i > 0; i--) { for (int j = 0; j < i - 1; j++) { if (t[j].compareto(t[j + 1]) > 0) { T c = t[j]; t[j] = t[j + 1]; t[j + 1] = c; ソートされるオブジェクトのクラスを特定せず T と表記 テンプレートクラス T はインターフェイス Comparable を実装 メソッド compareto() を持つ

テンプレートの活用 : クラス public class BinaryHeap<T> { /** データを保持するリスト */ private List<T> list; /** 要素を比較する方法 */ private Comparator<T> comparator = null; /** 要素数 */ private int n;

Main.java package withouttemplate; import java.util.arraylist; import java.util.collections; import java.util.list; import java.util.sortedset; import java.util.treeset; /** * テンプレートを使わない例 * @author tadaki */ public class Main { private List list; private SortedSet sortedset; public Main() { /** thread-safe とするための処理 */ list = Collections.synchronizedList(new ArrayList()); sortedset = Collections.synchronizedSortedSet(new TreeSet()); public void exec() { /** データの生成 */ for (int i = 0; i < 10; i++) { int k = (int) (100 * Math.random()); list.add(k); sortedset.add(k); /** list の内容を出力 */ System.out.println("members in list"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); /** sortedset の中身をリストに変換 */ List sortedlist = Collections.synchronizedList(new ArrayList()); while(!sortedset.isempty()){ /** sortedset から何が出てくるか不明なため Object のインスタンスになる */ Object first = sortedset.first(); sortedset.remove(first); sortedlist.add((integer)first); /** sortedlist の中身を出力 */ System.out.println("members in sortedset"); for (int i = 0; i < sortedlist.size(); i++) { System.out.println(sortedList.get(i)); /** * @param args the command line arguments */ public static void main(string[] args) { 1/2 ページ

Main.java new Main().exec(); 2/2 ページ

Main.java package withtemplate; import java.util.arraylist; import java.util.collections; import java.util.list; import java.util.sortedset; import java.util.treeset; /** * テンプレートを使った例 * @author tadaki */ public class Main { /** テンプレートでコンテナの要素のクラスを指定 */ private List<Integer> list; private SortedSet<Integer> sortedset; public Main() { /** thread-safe とするための処理 */ list = Collections.synchronizedList(new ArrayList<Integer>()); sortedset = Collections.synchronizedSortedSet(new TreeSet<Integer>()); public void exec() { for (int i = 0; i < 10; i++) { int k = (int) (100 * Math.random()); list.add(k); sortedset.add(k); System.out.println("members in list"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); List<Integer> sortedlist = Collections.synchronizedList(new ArrayList<Integer>()); while(!sortedset.isempty()){ /** sortedset から Integer 出てくるのが明か */ Integer first = sortedset.first(); sortedset.remove(first); sortedlist.add(first); System.out.println("members in sortedset"); for (int i = 0; i < sortedlist.size(); i++) { System.out.println(sortedList.get(i)); /** * @param args the command line arguments */ public static void main(string[] args) { new Main().exec(); 1/1 ページ

Main2.java package withtemplate; import java.util.arraylist; import java.util.collections; import java.util.comparator; import java.util.list; import java.util.sortedset; import java.util.treeset; /** * * @author tadaki */ public class Main2 { /** 保存するデータの構造を定義 */ private class Data { private String label; private double value; public Data(String label, double value) { this.label = label; this.value = value; public String getlabel() { return label; public double getvalue() { return value; /** データの比較方法を定義 */ private class DataCompare implements Comparator<Data> { @Override public int compare(data o1, Data o2) { int k = 1; if (o2.value > o1.value) { k = -1; if (o1.equals(o2)) { k = 0; return k; private SortedSet<Data> sortedset; 1/2 ページ public Main2() { sortedset = Collections.synchronizedSortedSet( new TreeSet<>(new DataCompare()));

Main2.java public void exec() { for (int i = 0; i < 10; i++) { double d = 100 * Math.random(); sortedset.add(new Data(String.valueOf(i), d)); List<Data> sortedlist = Collections.synchronizedList(new ArrayList<Data>()); while (!sortedset.isempty()) { /** sortedset から Integer 出てくるのが明か */ Data first = sortedset.first(); sortedset.remove(first); sortedlist.add(first); System.out.println("members in sortedset"); for (int i = 0; i < sortedlist.size(); i++) { Data d = sortedlist.get(i); System.out.println( d.getlabel() + " " + String.valueOf(d.getValue())); /** * @param args the command line arguments */ public static void main(string[] args) { new Main2().exec(); 2/2 ページ