5月10日

コレクションフレームワークの練習として、音楽プレーヤーみたいなアプリを作ってみる。

アプリを作成するために、新規Javaプロジェクトとして「musicplayer」プロジェクトを作成する。

新規クラスで「MusicPlayer」を作成する。
このとき、パッケージ名は「jp.abc」とする。
一般的にパッケージ名を決める場合は、企業やアプリのドメイン名を反転したものを使用する。
そうしておけば、世界的に重複する心配がないので。

例:
twitter.com → com.twitter.Hoge
gmail.google.com → com.google.gmail

package jp.abc;

public class MusicPlayer {

}

テストクラスを作成する。
[新規]-[その他] から「JUnitテストケース」を選択する。

package jp.abc;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
	}

}

addMusic()上にマウスカーソルをもっていき、「addMusic(String, String)を作成する」をクリックすると、
MusicPlayerにメソッドが追加される。
引数名が不適切なので、修正する。

package jp.abc;

public class MusicPlayer {

	public void addMusic(String title, String artist) {

	}

}

音楽を追加した後の動作を考える。
とりあえず、音楽の数を調べたいので、テストケースにメソッドを追加する。

package jp.abc;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
	}

}

countMusic()がコンパイルエラーなので、マウスカーソルをその上に移動し、「countMusic()を作成する」をクリックし、メソッドを作成する。

package jp.abc;

public class MusicPlayer {

	public void addMusic(String title, String artist) {

	}

	public int countMusic() {
		return 0;
	}

}

テストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

}

テストを実行するとエラーになるので、MusicPlayerをそれなりに実装する必要性が発生する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

}

テストをパスできたので、新しい機能を追加する。
そのために、テストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

	@Test
	void タイトルとアーティストの確認() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		Music m = mp.getMusic(0);
	}
}

getMusic()でコンパイルエラーになっているので、マウスカーソルを上に持っていき「getMusic()を作成する」をクリックし、メソッドを作成する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

}

テストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

	@Test
	void タイトルとアーティストの確認() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		Music m = mp.getMusic(0);
		assertNotNull(m);
	}
}

テストがエラーになるので、テストにパスするようにMusicPlayerを変更する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		return new Music();
	}

}

テストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

	@Test
	void タイトルとアーティストの確認() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		Music m = mp.getMusic(0);
		assertNotNull(m);
		assertThat(m.getTitle(), is("Lemon"));
	}
}

getTitle()のコンパイルエラーを解消する。

package jp.abc;

public class Music {

	public String getTitle() {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

}

コンパイルエラーが解消したけどテストはエラーなので、テストにパスするように、戻り値で”Lemon”を返す。

package jp.abc;

public class Music {

	public String getTitle() {
		return "Lemon";
	}

}

さらにテストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

	@Test
	void タイトルとアーティストの確認() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		Music m = mp.getMusic(0);
		assertNotNull(m);
		assertThat(m.getTitle(), is("Lemon"));
		mp.addMusic("flamingo", "米津玄師");
		m = mp.getMusic(1);
		assertNotNull(m);
		assertThat(m.getTitle(), is("flamingo"));
	}
}

きちんと実装しないとテストにパスしないっぽい。。。
Musicクラスにタイトルとアーティストを保存できるよう、最小限の実装をする。

package jp.abc;

public class Music {
	private String title;
	private String artist;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getArtist() {
		return artist;
	}

	public void setArtist(String artist) {
		this.artist = artist;
	}

}

MusicPlayerも、addMusic()とgetMusoic()をきちんと実装する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		m.setTitle(title);
		m.setArtist(artist);
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		return musics.get(i);
	}

}

これでテストにパスできるようになった!

音楽プレーヤーにプレイリストを追加できるようにする。
テストを追加する。

package jp.abc;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class MusicPlayerTest {

	@Test
	void 音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		int n = mp.countMusic();
		assertThat(n, is(1));
		mp.addMusic("flamingo", "米津玄師");
		n = mp.countMusic();
		assertThat(n, is(2));
	}

	@Test
	void タイトルとアーティストの確認() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		Music m = mp.getMusic(0);
		assertNotNull(m);
		assertThat(m.getTitle(), is("Lemon"));
		mp.addMusic("flamingo", "米津玄師");
		m = mp.getMusic(1);
		assertNotNull(m);
		assertThat(m.getTitle(), is("flamingo"));
	}
	
	@Test
	void プレイリストを作る() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
	}
}

MusicPlayerにaddPlayList()を追加してコンパイルエラーを解消する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		m.setTitle(title);
		m.setArtist(artist);
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		return musics.get(i);
	}

	public void addPlayList(String name) {

	}

}

テストを追加する。
Musicと同様に、プレイリストの数を返す機能を追加してみる。

	@Test
	void プレイリストを作る() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
		int n = mp.countPlayList();
		assertThat(n, is(1));
	}

countPlayList()を作成してコンパイルエラーを解消する。
「return 1;」でテストにパスする。

	public int countPlayList() {
		return 1;
	}

さらにプレイリストを追加する。
テストがエラーになるので、パスするようにMusicPlayerを実装する。

	@Test
	void プレイリストを作る() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
		int n = mp.countPlayList();
		assertThat(n, is(1));
		mp.addPlayList("バラード集");
		n = mp.countPlayList();
		assertThat(n, is(2));
	}

addMusic()とcountMusic()を参考にして実装する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();
	private List<PlayList> playLists = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		m.setTitle(title);
		m.setArtist(artist);
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		return musics.get(i);
	}

	public void addPlayList(String name) {
		playLists.add(new PlayList());
	}

	public int countPlayList() {
		return playLists.size();
	}

}

プレイリストを取得するテストを追加する。

	@Test
	void プレイリスト名を調べる() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
		PlayList p = mp.getPlayList(0);
		assertNotNull(p);
	}

getPlayList()のコンパイルエラーを解消する。
MusicPlayerにメソッドを追加する。

	public PlayList getPlayList(int i) {
		return null;
	}

テストがエラーになるので、fakeでテストにパスさせる。

	public PlayList getPlayList(int i) {
		return new PlayList();
	}

テストを追加する。

	@Test
	void プレイリスト名を調べる() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
		PlayList p = mp.getPlayList(0);
		assertNotNull(p);
		String s = p.getName();
		assertThat(s, is("お気に入り"));
	}

getName() のコンパイルエラーを解消する。

package jp.abc;

public class PlayList {

	public String getName() {
		return null;
	}

}

テストがエラーになるので、fakeでテストにパスさせる。

package jp.abc;

public class PlayList {

	public String getName() {
		return "お気に入り";
	}

}

テストを追加する。

	@Test
	void プレイリスト名を調べる() {
		MusicPlayer mp = new MusicPlayer();
		mp.addPlayList("お気に入り");
		PlayList p = mp.getPlayList(0);
		assertNotNull(p);
		String s = p.getName();
		assertThat(s, is("お気に入り"));
		mp.addPlayList("バラード集");
		p = mp.getPlayList(1);
		assertThat(p.getName(), is("バラード集"));
	}

テストにパスするようにMusicPlayerを実装する。

package jp.abc;

import java.util.ArrayList;
import java.util.List;

public class MusicPlayer {
	private List<Music> musics = new ArrayList<>();
	private List<PlayList> playLists = new ArrayList<>();

	public void addMusic(String title, String artist) {
		Music m = new Music();
		m.setTitle(title);
		m.setArtist(artist);
		musics.add(m);
	}

	public int countMusic() {
		return musics.size();
	}

	public Music getMusic(int i) {
		return musics.get(i);
	}

	public void addPlayList(String name) {
		PlayList p = new PlayList();
		p.setName(name);
		playLists.add(p);
	}

	public int countPlayList() {
		return playLists.size();
	}

	public PlayList getPlayList(int i) {
		return playLists.get(i);
	}

}

プレイリストに音楽を追加できるようにしたい!
テストを追加する。

	@Test
	void プレイリストに音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		mp.addPlayList("お気に入り");
		Music m = mp.getMusic(0);
		assertThat(m.getTitle(), is("Lemon"));
		PlayList p = mp.getPlayList(0);
		mp.addMusicToPlayList(m, p);
		int n = p.countMusic();
		assertThat(n, is(1));
	}

コンパイルエラーを解消する。

package jp.abc;

public class PlayList {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int countMusic() {
		return 0;
	}

}

fakeでテストにパスさせる。

package jp.abc;

public class PlayList {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int countMusic() {
		return 1;
	}

}

テストを追加する。

	@Test
	void プレイリストに音楽を追加する() {
		MusicPlayer mp = new MusicPlayer();
		mp.addMusic("Lemon", "米津玄師");
		mp.addMusic("flamingo", "米津玄師");
		mp.addPlayList("お気に入り");
		Music m = mp.getMusic(0);
		assertThat(m.getTitle(), is("Lemon"));
		PlayList p = mp.getPlayList(0);
		mp.addMusicToPlayList(m, p);
		int n = p.countMusic();
		assertThat(n, is(1));
		m = mp.getMusic(1);
		mp.addMusicToPlayList(m, p);
		n = p.countMusic();
		assertThat(n, is(2));
	}

TDDするときは、エラー状態でその日の作業を終える。
次に作業を再開するとき、テストを実行すればエラーが出るので、そこから再開すればいいことがすぐにわかる。

5月7日

授業の内容を記録するブログ
URL: http://2019se3.satoshis.jp/

テキストの14章から

リスト14-1

package ex;

public class Main {

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		// ここで何らかの時間がかかる処理
		long end = System.currentTimeMillis();
		System.out.println("処理にかかった時間は…"
				+ (end - start) + "ミリ秒でした");
	}

}

前回の素数かどうかを判定するためのJUnitテスト PrimeTest.java

package ex;

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.Test;

class PrimeTest {

	@Test
	void 素数() {
		Prime p = new Prime();
		assertThat(p.isPrime(2), is(true));
		assertThat(p.isPrime(3), is(true));
		assertThat(p.isPrime(5), is(true));
		assertThat(p.isPrime(7), is(true));
		assertThat(p.isPrime(11), is(true));
		assertThat(p.isPrime(13), is(true));
		assertThat(p.isPrime(6700417), is(true));
		assertThat(p.isPrime(Integer.MAX_VALUE), is(true));
		//System.out.println(Integer.MAX_VALUE);
	}

	@Test
	void 素数ではない() {
		Prime p = new Prime();
		assertThat(p.isPrime(4), is(false));
		assertThat(p.isPrime(6), is(false));
		assertThat(p.isPrime(8), is(false));
		assertThat(p.isPrime(9), is(false));
	}
}

ターゲットプログラム Prime.java

package ex;

public class Prime {

	public boolean isPrime(int n) {
		if (n == 2) return true;
		if (n % 2 == 0) return false;
		for (int i = 3; i < n /2; i+=2) {
			if (n % i == 0) return false;
		}
		return true;
	}

}

この素数判定をリスト14-1の時間がかかる処理として追加する。

package ex;

public class Main {

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		// ここで何らかの時間がかかる処理
		Prime p = new Prime();
		boolean b = p.isPrime(Integer.MAX_VALUE);
		System.out.println(Integer.MAX_VALUE
				+ "の素数判定結果は" + b + "です");
		long end = System.currentTimeMillis();
		System.out.println("処理にかかった時間は…"
				+ (end - start) + "ミリ秒でした");
	}

}

実行結果は以下の通り。

2147483647の素数判定結果はtrueです
処理にかかった時間は…1148ミリ秒でした

テキストのリスト14-2のコードを追加する。

package ex;

import java.util.Date;

public class Main {

	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		// ここで何らかの時間がかかる処理
		Prime p = new Prime();
		boolean b = p.isPrime(Integer.MAX_VALUE);
		System.out.println(Integer.MAX_VALUE
				+ "の素数判定結果は" + b + "です");
		long end = System.currentTimeMillis();
		System.out.println("処理にかかった時間は…"
				+ (end - start) + "ミリ秒でした");

		// リスト14-2
		Date now = new Date();
		System.out.println(now);
		System.out.println(now.getTime());
		Date past = new Date(1316622225935L);
		System.out.println(past);
	}

}

実行結果は以下の通り。

2147483647の素数判定結果はtrueです
処理にかかった時間は…1142ミリ秒でした
Tue May 07 10:34:32 JST 2019
1557192872306
Thu Sep 22 01:23:45 JST 2011

テキストのリスト14-3をCalMain.javaとして作成する。

package ex;

import java.util.Calendar;
import java.util.Date;

public class CalMain {

	public static void main(String[] args) {
		// 現在の年を表示する
		Date now = new Date();
		Calendar c = Calendar.getInstance();
		c.setTime(now);
		int y = c.get(Calendar.YEAR);
		System.out.println("今年は" + y + "年です");
		// 指定した日のDate型の値を得る
		c.set(2010, 8, 22, 1, 23, 45);
		Date past = c.getTime();
		System.out.println(past);
	}

}

SimpleDateFormat の使用例としてリスト14-4 のコードをCalMain.javaに追加する。

package ex;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class CalMain {

	public static void main(String[] args) throws Exception {
		// 現在の年を表示する
		Date now = new Date();
		Calendar c = Calendar.getInstance();
		c.setTime(now);
		int y = c.get(Calendar.YEAR);
		System.out.println("今年は" + y + "年です");
		// 指定した日のDate型の値を得る
		c.set(2010, 8, 22, 1, 23, 45);
		Date past = c.getTime();
		System.out.println(past);

		// リスト14-4 のコードを追加
		SimpleDateFormat f =
				new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		String s = f.format(now);
		System.out.println(s);
		// 指定日時の文字列を解析しDate型として得る
		Date d = f.parse("2011/09/22 01:23:45");
		System.out.println(d);
	}

}

リスト14-5 Empty.java

package ex;

public class Empty {

}

EmptyMain.java (テキストでは Main.java)

package ex;

public class EmptyMain {

	public static void main(String[] args) {
		Empty e = new Empty();
		String s = e.toString();
		System.out.println(s);
	}

}

実行結果は以下の通り。
@の手前はFQCNで@のあとはハッシュ値の16進数表記。

ex.Empty@70dea4e

toString() メソッドのカスタマイズ
Heroクラスを選択した状態で、メニューから[ソース]-[toString()生成]を選択する。
そのままOKすると、EclipseがtoString()メソッドを生成してくれる。
toString()で表示する必要がないフィールドがあれば、チェックを外してからOKする。

Hero.java

package ex;

public class Hero {
	String name;
	int hp;

	@Override
	public String toString() {
		return getClass().getName()
				+ "[name=" + name + ", hp=" + hp + "]";
	}
}

HeroMain.java

package ex;

public class HeroMain {

	public static void main(String[] args) {
		Hero h = new Hero();
		h.name = "ミナト";
		h.hp = 100;
		System.out.println(h.toString());
	}

}

Heroクラスを比較するために equals() メソッドを使ってみる。

package ex;

public class HeroMain {

	public static void main(String[] args) {
		Hero h = new Hero();
		h.name = "ミナト";
		h.hp = 100;
		System.out.println(h.toString());
		Hero h2 = new Hero();
		h2.name = "ミナト";
		h2.hp = 100;
		System.out.println(h.equals(h2));
	}

}

実行結果は以下の通り。

ex.Hero[name=ミナト, hp=100]
false

名前とhpが同じならtrueにしたい。

Eclipseに equals() メソッドを生成する機能があるので、それを使うと便利。
Heroクラスを選択した状態でメニューから[ソース]-[hashCode()およびequals()の生成]を選択する。
hpとnameフィールドにチェックが入っているのを確認してOKする。
すると、hashCode()とequals()メソッドが生成される。
HeroMainを実行すると、trueが出力されるのが確認できる。

package ex;

public class Hero {
	String name;
	int hp;

	@Override
	public String toString() {
		return getClass().getName()
				+ "[name=" + name + ", hp=" + hp + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + hp;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Hero other = (Hero) obj;
		if (hp != other.hp)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}

HeroMainでh2の名前とHPを変更して、きちんと判定しているか確認する。

package ex;

public class HeroMain {

	public static void main(String[] args) {
		Hero h = new Hero();
		h.name = "ミナト";
		h.hp = 100;
		System.out.println(h.toString());
		Hero h2 = new Hero();
		h2.name = "ミナト";
		h2.hp = 100;
		System.out.println(h.equals(h2));
		h2.hp = 101;
		System.out.println(h.equals(h2));
		h2.hp = 100;
		System.out.println(h.equals(h2));
		h2.name = "ミナトA";
		System.out.println(h.equals(h2));
	}

}

実行結果は以下の通り。

ex.Hero[name=ミナト, hp=100]
true
false
true
false

コレクションフレームワーク
コレクションフレームワークは、複数のオブジェクトを扱う仕組みで、Javaではjava.utilパッケージにインタフェースやクラスが用意されている。

Listインタフェースの実装であるArrayListを使用した例。
add() : 要素を追加する。
remove() : 要素を削除する。
size() : 要素の数。
contains() : 要素が含まれているかどうかを調べる。

package ex;

import java.util.ArrayList;

public class ListMain {

	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<>();
		list.add("プレミアムモルツ");
		list.add("バドワイザー");
		list.add("ギネス");
		//System.out.println(list.get(1));
		list.add(0, "一番搾り");
		//System.out.println(list.get(1));
		// ループで要素を表示
		for (int i = 0; i < list.size(); i++) {
			System.out.println(i + ":" + list.get(i));
		}
		list.remove(0);
		for (String s : list) {
			System.out.println(s);
		}
		System.out.println(list.contains("一番搾り"));
		list.remove("ギネス");
		for (String s : list) {
			System.out.println(s);
		}
	}

}

Setインタフェースを実装したHashSetを使用した例。

package ex;

import java.util.HashSet;
import java.util.Set;

public class SetMain {

	public static void main(String[] args) {
		Set<String> set = new HashSet<>();
		set.add("マリオ");
		set.add("ルイージ");
		set.add("ピーチ");
		for (String s : set) {
			System.out.println(s);
		}
		set.add("マリオ");
		for (String s : set) {
			System.out.println(s);
		}
		System.out.println(set.contains("ピーチ"));
		set.remove("ピーチ");
		for (String s : set) {
			System.out.println(s);
		}
		System.out.println(set.contains("ピーチ"));
	}

}

実行結果は以下の通り。

マリオ
ピーチ
ルイージ
マリオ
ピーチ
ルイージ
true
マリオ
ルイージ
false

Mapインタフェースを実装したHashMapを使用した例。

package ex;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapMain {

	public static void main(String[] args) {
		Map<String, String> map = new HashMap<>();
		map.put("m", "モンスターハンター");
		map.put("d", "ドラゴンクエスト");
		map.put("p", "ポケットモンスター");
		System.out.println(map.get("m"));
		Set<String> set = map.keySet();
		for (String key : set) {
			String v = map.get(key);
			System.out.println(key + ":" + v);
		}
		System.out.println(map.containsKey("a"));
		map.put("p", "パズルアンドドラゴンズ");
		for (String key : set) {
			String v = map.get(key);
			System.out.println(key + ":" + v);
		}
	}

}

実行結果は以下の通り。

モンスターハンター
p:ポケットモンスター
d:ドラゴンクエスト
m:モンスターハンター
false
p:パズルアンドドラゴンズ
d:ドラゴンクエスト
m:モンスターハンター