Javaの授業 26 [ コレクションフレームワーク]
【 コレクションフレームワーク 】
知らなくてもプログラムはできるが知っていると便利。
※特に【 Arraylist 】はおさえておくこと。
・Arraylist(可変長配列)
配列の要素数を決めなくてもよい配列。
importt java.util.*; //java.util.*のインポート
ArrayList< 型 > list=new Arraylist< 型 >()
list.add("~~") 要素の追加
list.add(i,"~~") i番目の要素として"~~"を追加
list.get(i) i番目の要素の参照
list.set(i,"~~") i番目の要素に"~~"を代入
list.remove(i) i番目の要素を削除
list.clear() 全要素を削除
list.size() 要素数
サンプル1
------------
Excute.java
---------------------
import java.util.*;
class Execute {
public static void main(String[] args) {
ArrayList<String> sList = new ArrayList<String>();
for(int i=0;i<10;i++){
sList.add("String : "+i);
}
for(int i=0;i<sList.size();i++){
System.out.println(sList.get(i));
}
// コメントをはずすとエラー
// sList.add(new Integer(123));
// sList.add(true);
// sList.add(new MyClass());
ArrayList<Integer> iList = new ArrayList<Integer>();
for(int i=0;i<10;i++){
iList.add(i);
}
for(int i=0;i<iList.size();i++){
System.out.println(iList.get(i));
}
ArrayList<MyClass> mList = new ArrayList<MyClass>();
for(int i=0;i<10;i++){
MyClass mc = new MyClass();
mList.add(mc);
}
for(int i=0;i<iList.size();i++){
System.out.println(mList.get(i).getNum());
System.out.println(mList.get(i).getStr());
}
}
}
-------------
MyClass.java
----------------------
class MyClass {
private int num;
private String str;
MyClass(){
num = 123;
str = "文字";
}
public void setNum(int num){
this.num = num;
}
public void setStr(String str){
this.str = str;
}
public int getNum(){
return num;
}
public String getStr(){
return str;
}
}
----------------------
【iterator】(反復子)
for(Iterator<String> it = list.iterator(); it.hasNext();) {
String name = it.next();
System.out.println(name);
}
it.hasNext() 次の要素があるかの確認。戻り値はboolean
it.next() 次の要素を得る
上記を更に略した記述。
拡張forループ
for (String name : list){
System.out.println(name);
}
Javaの授業 25 [ パッケージ ]
【 パッケージ 】
1.パッケージの利用
【import宣言】によるクラスの取り込み
記述
import ~; ~というパッケージを利用します。
※これまで利用してきたパッケージはどこにあるのか。
C:\Proguram Files\Java\jre6\lib\rt.jar
→コピーしてデスクトップに貼り付け。
→拡張子".jar"を"zip"に書き換え。
→中が確認できるようになる。
サンプル①
---------------
Execute.java
---------------
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Execute {
public static void main(String[] args){
System.out.println("Ctrl + c で終了します");
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
while(true){
try{
System.out.println("入力した文字 : "+buf.readLine());
}catch(IOException e){
e.printStackTrace();
}
}
}
}
---------------
※上記zipからimportされたファイルの存在を確認してみる。
(各ファイルの説明はインターネットで検索して確認 )
2.パッケージの宣言
今後、作成するプログラムが大きくなってくるとわかりやすくまとめる必要がある。
→フォルダ(パッケージ)で分けて管理。
→各ファイルでどのパッケージに属するのか記述しておく必要がある。
記述
package ~; ~というパッケージに属します。
※ソースファイルの1行目で宣言する。
サンプル②
"パッケージの宣言"フォルダを作成。
その中に"main"フォルダと"sample"フォルダ作成。
mainフォルダにExecute.java
sampleフォルダにSampleA.java、SampleB.java
--------------------------------
Execute.java
--------------------------------
package main;
import sample.SampleA;
public class Execute {
public static void main(String[] args){
SampleA sa = new SampleA();
sample.SampleB sb = new sample.SampleB();
// コメントをはずすとエラー
// SampleB sb2 = new SampleB();
}
}
--------------------------------
SampleA.java
--------------------------------
package sample;
public class SampleA {
public SampleA(){
System.out.println("SampleAをインスタンス化しました");
}
}
--------------------------------
SampleB.java
--------------------------------
package sample;
public class SampleB {
public SampleB(){
System.out.println("SampleBをインスタンス化しました");
}
}
--------------------------------
【 コンパイル、実行の仕方 】
これまでのようにExecute.javaのフォルダ"main"に移動してコンパイルするとエラー。
親フォルダである"パッケージの宣言"フォルダに移動してExecute.javaをコンパイルする。
× > cd ---\パッケージの宣言\main
> javac Execute.java →SampleA,Bが見つからない。
○ > cd ---\パッケージの宣言
> javac main\Execute.java →コンパイルOK
理由:コンパイルした時今いるフォルダ内からファイルを探す為。
※実行時も同様に親フォルダから実行する。
> java main.Execute
※更に親フォルダから見る場合実行には【-classpath】を使用する。
3.パッケージとアクセス制御
・修飾子
【 public 】 どこからでも利用可
【 protected 】 パッケージ+サブクラスで利用可
【 なし 】 パッケージ内からのみ利用可
【 private 】 クラス内からのみ利用可
※【protected】 サブクラスであればパッケージ外から利用できる。
Javaの授業 24 [ スレッド その2 ]
【 スレッド 】
マルチスレッドにする方法
1.スレッドクラスを継承する方法
2.Runnableインターフェイスを実装する方法
サンプル
----------------------
TestThread.java (継承クラス)←1の方法
----------------------
public class TestThread extends Thread {
public void run(){
System.out.println("TestThread");
}
}
----------------------
TestRunnable.java(実装クラス)←2の方法
----------------------
public class TestRunnable implements Runnable{
public void run(){
System.out.println("TestRunnable");
}
}
-----------------------
Execute.java
-----------------------
public class Execute {
public static void main(String[] args) {
System.out.println("開始")
//Threadを継承したクラスを使う場合
TestThread tt = new TestThread();
tt.start();
//Runnableを実装したクラスを使う場合
TestRunnable tr = new TestRunnable();
Thread thread = new Thread(tr);
thread.start();
System.out.println("終了");
}
}
-------------------------
単純なプログラムでは継承で。
複雑になってくるとRunnableで。
→今後AndroidではRunnableがよく出てきます。
(※よくある失敗 runメソッドに引数を設定してしまう。)
オーバーライドする為には引数なし。run()