Recommended
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Scala の関数型プログラミングを支える技術
ジェネリクスの基礎と応用 JJUG CCC 2012 Fall
Chapter 6: Computing on the language (R Language Definition)
R Language Definition 2.2 to 2.3
G*workshop sendai 20100424(v2)
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Equality in Scala (ScalaMatsuri 2020)
More Related Content
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Scala の関数型プログラミングを支える技術
What's hot (19)
ジェネリクスの基礎と応用 JJUG CCC 2012 Fall
Chapter 6: Computing on the language (R Language Definition)
R Language Definition 2.2 to 2.3
G*workshop sendai 20100424(v2)
Similar to Javaプログラミング入門【第7回】 (20) How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Equality in Scala (ScalaMatsuri 2020)
C#を始めたばかりの人へのLINQ to Objects
Essential Scala 第3章 オブジェクトとクラス
More from Yukiko Kato (17)
【AWS】EC2インスタンスでWebサーバ起動(for Mac)
Javaプログラミング入門【第7回】
19. メモリが回収されないプログラム
public class GcTest3 {
static ArrayList<int[]> list = new ArrayList<int[]>();
public static void main(String[] args) {
while(true) {
int[] a = new int[1000];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
list.add(a);
System.out.println("残メモリ : " +
Runtime.getRuntime().freeMemory());
}
}
}
21. プログラム内で強制的にガーベッジコ
レクションを行う
public class GcTest4 {
public static void main(String[] args) {
for (int n = 0; true; n++) {
int[] a = new int[1000];
for (int i = 0; i < a.length; i++) {
a[i] = i;
}
if (n % 100 == 0) {
System.out.println("gcを呼び出します");
System.gc();
}
System.out.println("残メモリ : " +
Runtime.getRuntime().freeMemory());
}
}
}
24. ClassA.java
public class ClassA {
public static ClassA last = null;
public String name;
public ClassA(String name) {
this.name = name;
last = this;
}
@Override
public String toString() {
return "[" + name + "]";
}
}
25. ClassB.java
public class ClassB extends ClassA {
public ClassA friend;
public ClassB(String name) {
super(name);
}
public ClassB(String name, ClassA friend) {
super(name);
this.friend = friend;
}
@Override
public String toString() {
return "[" + name + ", " + friend + "]";
}
}
26. GcQuiz.java(その1)
public class GcQuiz {
public static ClassA q = new ClassA("ジマイマ");
public ClassA r = new ClassA("レベッカ");
public static void main(String[] args) {
ClassA a = new ClassA("マトン");
ClassA b = new ClassA("トム");
ClassA c = new ClassA("パペット");
ClassB[] arrayA = new ClassB[4];
b = c;
for (int i = 0; i < arrayA.length; i++) {
arrayA[i] = new ClassB("犬" + i);
}
arrayA[3].friend = arrayA[3];
arrayA[0] = arrayA[1];
c = arrayA[2];
arrayA[1] = null;
ClassA d = arrayA[0];
27. GcQuiz.java(その2 続き)
ClassB arrayB[] = new ClassB[4];
arrayB[0] = new ClassB("フロプシー", new ClassA("ネズミ
"));
arrayB[1] = new ClassB("モプシー", new ClassA("アナキン
"));
arrayB[2] = new ClassB("サテンドール", c);
arrayB[3] = new ClassB("ピーター", new ClassA("ベンジャミ
ン"));
}
}
arrayA = null;
arrayB[0].friend = null;
arrayB[1] = null;
arrayB[2] = null;
ClassB e = new ClassB("ルーシー", new ClassA("ティギー"));
e = null;
// ※ここの時点で参照されているインスタンスは何か?
30. 配列の復習
public class ArrayTest {
public static void main(String[] args) {
// 配列の確保
String[] array = new String[3];
// 要素の代入
array[0] = "Alice";
array[1] = "Bob";
array[2] = "Chris";
}
}
// 要素の参照
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
34. ArrayListを使ってみる
import java.util.ArrayList;
public class ArrayListTest1 {
public static void main(String[] args) {
// ArrayListインスタンスの確保
ArrayList<String> list = new ArrayList<String>();
// 要素の追加(addメソッド)
list.add("Alice");
list.add("Bob");
list.add("Chris");
// 要素の参照(getメソッド)
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
41. 配列とArrayListの比較
配列
java.util.ArrayList
確保
array = new 要素の型[要
素数];
list = new ArrayList<要素の型
>();
代入(置き換え)
array[添字] = 要素;
list.set(添字, 要素);
追加
なし
list.add(要素);
参照
array[添字]
list.get(添字);
要素数
array.length
list.size();
添字が範囲外の時 ArrayIndexoutOfBoundsE
xception
IndexOutOfBoundsException
44. イテレータを使ってみる
import java.util.ArrayList;
import java.util.Iterator;
public class IteratorTest {
public static void main(String[] args) {
// ArrayListインスタンスの確保
ArrayList<String> list = new ArrayList<String>();
// 要素の追加(addメソッド)
list.add("Alice");
list.add("Bob");
list.add("Chris");
// イテレータを使ったforループ
for (Iterator<String> it = list.iterator(); it.hasNext();) {
String name = it.next();
System.out.println(name);
}
}
}
45. iteratorメソッド
• for文の中の
Iterator<String> it = list.iterator();
iteratorメソッドを使用して、ArrayListのインスタンスか
らイテレータを得ている。
変数itがiteratorメソッドの戻り値(イテレータ)で初期化さ
れている。イテレータは、「本を読んでいる時の現在の
ページに挟んでいるしおり」と似たような働きをする
• for文の条件式は
it.hasNext();
イテレータに対して「次の要素はあるか?」と尋ねる。戻
り値はboolean。次の要素がある場合は、trueが返却され、
ない場合は、falseが返却される
47. 拡張for文を使ってみる
import java.util.ArrayList;
public class EnhancedForLoopTest {
public static void main(String[] args) {
// ArrayListインスタンスの確保
ArrayList<String> list = new ArrayList<String>();
// 要素の追加(addメソッド)
list.add("Alice");
list.add("Bob");
list.add("Chris");
// 拡張forループ
for (String name : list) {
System.out.println(name);
}
}
}
48. 拡張for文
• 以下の部分が拡張for文
for (String name : list) {
System.out.println(name);
}
• 構文
for (要素の型 変数名: コレクションの式) {
変数を使った処理
}
• 拡張for文を使うことによって、イテレータを得る
iteratorメソッドやイテレータを次の要素があるかどう
かを調べるhasNextメソッドも、nextメソッドも書かず
に済む。
• 配列でも拡張for文を記述することが出来る
50. intをArrayListで管理する
import java.util.ArrayList;
public class IntegerArrayListTest {
public static void main(String[] args) {
// ArrayListのインスタンスの確保
ArrayList<Integer> list = new ArrayList<Integer>();
// 要素の追加
list.add(12);
list.add(34);
list.add(56);
list.add(78);
// 拡張forループ
for (int n : list) {
System.out.println(n);
}
}
}
52. オートボクシング
• プリミティブ型→ラッパークラスへの変換
▫ ボクシング(boxing conversion)
• ラッパークラス→プリミティブ型への変換
▫ アンボクシング(unboxing conversion)
• 自動的にボクシング、アンボクシングが行われ
ることを、オートボクシング(autoboxing)、
オートアンボクシング(autounboxing)と言う
▫ プリミティブ型をラッパークラスで包む様子を
「ボックス(箱)に入れること」に見立てている
55. 削除と確認の例(続く)
public class RemoveContains {
public static void main(String[] args) {
// ArrayListインスタンスの確保
ArrayList<String> list = new ArrayList<String>();
// 要素の追加(addメソッド)
list.add("Alice");
list.add("Bob");
list.add("Chris");
list.add("Diana");
list.add("Elmo");
// 削除の前に要素を表示
System.out.println("削除の前");
for (int i = 0; i < list.size(); i++) {
System.out.println(i + ":" + list.get(i));
}
System.out.println();
63. LinkedListを使った例
import java.util.LinkedList;
public class LinkedListTest {
public static void main(String[] args) {
// LinkedListのインスタンスを確保する
LinkedList<String> list = new LinkedList<String>();
// 要素の追加(addメソッド)
list.add("Bob");
list.add("Chris");
list.add("Diana");
list.add("Elmo");
// 現在の状態
System.out.println(list);
// 先頭にAliceを挿入
list.addFirst("Alice");
// Aliceを挿入した後の状態
System.out.println(list);
}
}
66. LinkedListをキューとして用いた例
(offer,peek,poll)
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListTest2 {
public static void main(String[] args) {
// QueueとしてLinkedListのインスタンスを確保する
Queue<String> queue = new LinkedList<String>();
// 要素の追加
queue.offer("Alice");
System.out.println("offerの後のqueue = " + queue);
queue.offer("Bob");
System.out.println("offerの後のqueue = " + queue);
queue.offer("Chris");
System.out.println("offerの後のqueue = " + queue);
queue.offer("Diana");
System.out.println("offerの後のqueue = " + queue);
// 先頭要素の参照
while (queue.peek() != null) {
// 要素の抽出と削除
String name = queue.poll();
System.out.println("pollの戻り値 = " + name);
System.out.println("pollの後のqueue = " + queue);
}
}
}
67. LinkedListをキューとして用いた例
(add,element,remove) ※続く
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.Queue;
public class LinkedListTest3 {
public static void main(String[] args) {
// QueueとしてLinkedListのインスタンスを確保する
Queue<String> queue = new LinkedList<String>();
// 要素の追加
queue.add("Alice");
System.out.println("addの後のqueue = " + queue);
queue.add("Bob");
System.out.println("addの後のqueue = " + queue);
queue.add("Chris");
System.out.println("addの後のqueue = " + queue);
queue.add("Diana");
System.out.println("addの後のqueue = " + queue);
68. LinkedListをキューとして用いた例
(add,element,remove) ※続き
try {
while (true) {
// 先頭要素の参照
String name = queue.element();
System.out.println("elementの戻り値 = " + name);
// 要素の抽出と削除
name = queue.remove();
System.out.println("removeの戻り値 = " + name);
System.out.println("removeの後のqueue = " +
queue);
}
} catch (NoSuchElementException e) {
e.printStackTrace();
}
}
}
69. LinkedListをスタックとして用いる(続
く)
import java.util.LinkedList;
import java.util.NoSuchElementException;
public class LinkedListTest4 {
public static void main(String[] args) {
// StackとしてLinkedListのインスタンスを確保する
LinkedList<String> stack = new LinkedList<String>();
// 要素の追加
stack.addFirst("Alice");
System.out.println("addの後のqueue = " + stack);
stack.addFirst("Bob");
System.out.println("addの後のqueue = " + stack);
stack.addFirst("Chris");
System.out.println("addの後のqueue = " + stack);
stack.addFirst("Diana");
System.out.println("addの後のqueue = " + stack);
stack.addFirst("Elmo");
System.out.println("addの後のqueue = " + stack);
70. LinkedListをスタックとして用いる(続
き)
try {
while (true) {
// 先頭要素の参照
String name = stack.getFirst();
System.out.println("getFirstの戻り値 = " + name);
// 要素の抽出と削除
name = stack.removeFirst();
System.out.println("removeFirstの戻り値 = " +
name);
System.out.println("removeFirstの後のqueue = " +
stack);
}
} catch (NoSuchElementException e) {
e.printStackTrace();
}
}
}
75. 名前と年齢をMapを使って表現する例
(続く)
// エントリに関する拡張forループ
for (Map.Entry<String, Integer> entry: map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
System.out.println();
// キーに関する拡張forループ
for (String name : map.keySet()) {
System.out.println(name);
}
System.out.println();
// 値に関する拡張forループ
for (int value : map.values()) {
System.out.println(value);
}
System.out.println();
84. Question.java
import java.util.ArrayList;
public class Question {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Alice");
list.add("Bob");
list.add("Chris");
// ※1
System.out.println(list.get(2)); //※2
System.out.println(list.size()); // ※3
for (String name: list) {
System.out.println(name);
}
}
}