JAVAプログラミング コレクション編
JAVAプログラミング コレクション編
〜Webアプリ作成の基礎を学ぶ〜
担当: 919
近日放送予定
だいぶ前にJavaプログラミング 〜Javaをはじめよう〜
を行いましたが、今回はその続きを行います。
この講義は今後JSP,サーブレット,Tomcat,Struts を使ったWebアプリ作成の基礎を固める基礎講座です。
文法編を行おうかと思いましたが、今回はいきなりその先の部分を行ってしまいます。
そのため前提知識がないとまったくついてこられないかもしれません。
だれか、Java基礎文法やリスト、スタックなどのアルゴリズムの基礎講座をやっていただけるとありがたいです。
目的
Javaにおいて最もよく使われるであろうコレクションについての基礎知識を深める。そして本講義後に予定しているWebアプリ作成講座の基礎を固める。
内容(予定)
- 第1回 List (ArrayList)
- 第2回 Set (HashSet, TreeSet)
- 第3回 Map
- 第4回 PriorityQueue
本講義で扱うコードのサンプル
だいたいこんなことを行っていきます。第1回放送予定の リスト サンプル
public class Member2 implements Comparable<Member2>{ // #1
private String name; //Memberの名前
private int age; //Memberの年齢
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Member2(String name, int age){
this.name = name;
this.age = age;
}
public int compareTo(Member2 o) { // #2
return this.getName().compareTo(o.getName());
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class ArrayList_Sort3 {
public static void main(String[] args) {
List<Member2> member = new ArrayList<Member2>();
//Memberの登録
member.add(new Member2("Bさん", 21));
member.add(new Member2("Aさん", 20));
member.add(new Member2("Cさん", 22));
Collections.sort(member, new NameSort()); //昇順にソート #1
Iterator<Member2> i = member.iterator(); //反復子を生成
while(i.hasNext()){
Member2 m = i.next(); // 要素を返し、次の要素へと進む
System.out.print("Name : " + m.getName());
System.out.println(" Age : " + m.getAge());
}
System.out.println("\----------------------");
Collections.sort(member, new NameReverseSort()); //降順にソート #2
i = member.iterator(); //イテレータを初期化する
while(i.hasNext()){
Member2 m = i.next(); // 要素を返し、次の要素へと進む
System.out.print("Name : " + m.getName());
System.out.println(" Age : " + m.getAge());
}
}
}
class NameSort implements Comparator<Member2>{ //#3
public int compare(Member2 o1, Member2 o2) {
return o1.getName().compareTo(o2.getName());
}
}
class NameReverseSort implements Comparator<Member2>{
public int compare(Member2 o1, Member2 o2) {
return o1.getName().compareTo(o2.getName()) * (-1); //#4
}
}
実行結果
Name : Aさん Age : 20
Name : Bさん Age : 21
Name : Cさん Age : 22
\----------------------
Name : Cさん Age : 22
Name : Bさん Age : 21
Name : Aさん Age : 20
第2回放送予定のSet サンプル
public class Schedule {
private String date; //日付
private String subject; //題名
//コンストラクタ
public Schedule(String date){
this.date = date;
this.subject ="";
}
//コンストラクタ
public Schedule(String date, String subject) {
this.date = date;
this.subject = subject;
}
//アクセサメソッド
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
//toStringのオーバーライド
public String toString() {
String message = this.date + " の予定は " + this.subject + " です";
return message;
}
//equalsのオーバーライド
public boolean equals(Object obj) {
//比較対象のオブジェクトの型が正しいかどうか確認
if (obj instanceof Schedule) {
Schedule schedule = (Schedule) obj;
//日付同士を比較し同じなら等しいとみなす
if(this.getDate().equals(schedule.getDate()))
return true;
else
return false;
}else{
return false;
}
}
//hashCodeのオーバーライド
public int hashCode() {
//日付をhash値とする
return this.date.hashCode();
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Set_final {
public static void main(String[] args) {
Set<Schedule> schedule = new HashSet<Schedule>();
//setを初期化する (予定の登録)
schedule.add(new Schedule("2008-08-05","合宿1日目"));
schedule.add(new Schedule("2008-08-06","合宿2日目"));
schedule.add(new Schedule("2008-08-07","合宿3日目"));
schedule.add(new Schedule("2008-08-08","合宿4日目"));
schedule.add(new Schedule("2008-08-10","オープン大会"));
//反復子の生成
Iterator<Schedule> ite = schedule.iterator();
//登録されている内容をすべて表示(確認のため)
while(ite.hasNext()){
System.out.println(ite.next());
}
System.out.println("\---------------");
//特定の日付の情報だけもらうために作る
Set<Schedule> findSchedule = new HashSet<Schedule>();
findSchedule.add(new Schedule("2008-08-05"));
findSchedule.add(new Schedule("2008-08-10"));
findSchedule.add(new Schedule("2008-08-11"));
// ----schedule AND findSchedule をする-----
Set<Schedule> intersect = new HashSet<Schedule>(schedule);
intersect.retainAll(findSchedule);
System.out.println("検索結果 :" + intersect);
//------重複値の追加のテストを行う---------
Schedule addSchedule = new Schedule("2008-08-08","アルバイト");
if(schedule.add(addSchedule)){
System.out.println("無事追加されました");
} else {
System.out.println(addSchedule.getDate() + " の予定の追加に失敗しました" +
" (理由)スケジュールの重複");
}
//追加に失敗したことを確認する
System.out.println(schedule);
}
}
実行結果
2008-08-10 の予定は オープン大会 です
2008-08-08 の予定は 合宿4日目 です
2008-08-07 の予定は 合宿3日目 です
2008-08-06 の予定は 合宿2日目 です
2008-08-05 の予定は 合宿1日目 です
\---------------
検索結果 :[2008-08-10 の予定は オープン大会 です, 2008-08-05 の予定は 合宿1日目 です]
2008-08-08 の予定の追加に失敗しました (理由)スケジュールの重複
[2008-08-10 の予定は オープン大会 です, 2008-08-08 の予定は 合宿4日目 です, 2008-08-07 の予定は 合宿3日目 です, 2008-08-06 の予定は 合宿2日目 です, 2008-08-05 の予定は 合宿1日目 です]
2008年09月07日(日) 22:59:20 Modified by ID:loohBW6bKw