--/--/-- (--) スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサー広告 |


2011/07/04 (Mon) JAVA応用5日目(Mapインターフェイス)

キーと値をセットで持つことが出来る配列のようなもの。
キーの重複は不可能だが値の重複は可能(上書きされる)。
追加や削除の結果を戻り値で確認することが出来る。

◆おまけ(拡張for文)
◆Mapインターフェイス
◆Mapインターフェイスを実装する主なクラス
◆Mapインターフェイスの機能
◆Mapインターフェイスのコンストラクタ
◆Mapインターフェイスのメソッド
◆クラス生成と要素の追加・削除
◆サンプルコード

おまけ(拡張for文)

TreeSet ts = new TreeSet();
Iterator it = ts.iterator();

while(it.hasNext()){
System.out.println(it.next());

この代わりに、

for(Car2 get : ts){
System.out.println(get);
}

と書くことが出来る。

for(String str : args){
System.out.println(str);
}

※ArrayListでは処理が遅くなるので使わないほうが良い。

Mapインターフェイス

キーとなる要素と値を対で持つことが可能なインターフェイス。
キーとなる要素は重複して持つことはできないが値は可能。
Mapインターフェイスを継承したSortedMapインターフェイスがある。
SortedMapは値ではなくキーとなる要素をソートする。

Mapインターフェイスを実装する主なクラス

HashMapクラス
LinkedHashMapクラス
SortedMapインターフェイスを実装するTreeMapクラス

Mapインターフェイスの機能

連想配列とも呼ばれ要素とキーを対で集合を管理する。
集合内の要素に名前(キー)をつけて管理することが出来る。
同じ要素への参照を複数保持することが出来る。
名前(キー)の重複は出来ない。
スレッドに同期化されない。

Mapインターフェイスのコンストラクタ

HashMap() デフォルト容量16、デフォルト負荷係数75でマップを作る。
HashMap(int) 初期容量を指定。
HashMap(int,float) 初期容量と負荷係数を指定。
HashMap(Map) 指定されたMapと同じマッピングで作成。

Mapインターフェイスのメソッド

Object put(Object,Object) キーと要素(値)を追加する。

※1 Setと異なり同じ値を入れると拒否されずに上書きされる。
※2 メソッドの戻り値(Object型)で上書きされる前の値を得ることが出来る。
※3 新規追加の場合はObject型のnullが戻り値になるので新規追加か否かを確認できる。

Object get(Object) キーの値を指定すると要素(値)を返す。
Object remove(Object) キーを指定しキーと値を削除する。

存在しないキーを削除しようとすると戻り値がnullになる。

void clear() マップを空にする。
int size() 格納されている要素の数を返す。

boolean containsKey(Object) キーを指定しマップ内に含まれるかどうかを返す。 
boolean containsValue(Object) 値を指定しマップ内に含まれるかどうかを返す。

Set keySet() マップ内に含まれるキーの一覧をセットとして返す。
boolean isEmpty() マップが空の場合にtrueを返す。
Collection values() マップ内に格納されている値のリストを返す。

※ここがSetでないのは重複を排除されないようにするため。

クラス生成と要素の追加・削除

HashMap hash = new HashMap();

引数を指定していないので、初期容量が16で負荷係数が75%のハッシュマップが生成される。

hash.put("Key1","AAA");

→hashにキーを"Key1"として要素"AAA"を追加する。
→その際、キーからHashCodeを算出しその領域に格納する。

hash.put("Key1","BBB");

→同じ場所に"BBB"として上書きされる。
→その際、戻り値として"AAA"が返される(String str = hash.put("Key1","BBB");)。

hash.remove("Key1");

存在しない箇所を削除すると戻り値がnullになる。
それにより削除が成功したかどうかを判断できる。

サンプルコード

package test;

import java.util.HashMap;
import java.util.Iterator;

public class Test {
//商品名リスト(キー)
static String[] itemList={"ガラパゴス","リンクス","ギャラクシー","アクオス","ガラパゴス"};
//在庫数リスト(値)
static int[] valueList={10,3,15,12,5};

public static void main(String[] args){
String item = null;
int val = 0;

HashMap hm = new HashMap();

//HashList(変数名hs)に登録
for(int i=0;i item = itemList[i];
val = valueList[i];
Object obj = hm.put(item,val);
if(obj==null){
System.out.println(item+"["+obj+"]を追加しました。");
}else{
System.out.println(item+"["+obj+"]を更新しました。");
}
}

System.out.println("\n商品名:在庫数:HashCode");

//HashSetから反復子を取得
Iterator it = hm.keySet().iterator();
while(it.hasNext()){
String key = it.next();
System.out.println(key+":"+hm.get(key)+":"+key.hashCode());
}

Object obj = hm.remove("商品A");
if(obj != null){
System.out.println("商品Aを削除しました。");
}else{
System.out.println("商品Aはありません。");
}

obj = hm.remove("商品A");
if(obj != null){
System.out.println("商品Aを削除しました。");
}else{
System.out.println("商品Aはありません。");
}
}
}

実行結果

ガラパゴス[null]を追加しました。
リンクス[null]を追加しました。
ギャラクシー[null]を追加しました。
アクオス[null]を追加しました。
ガラパゴス[10]を更新しました。

商品名:在庫数:HashCode
ガラパゴス:5:-992408519
アクオス:12:383273564
ギャラクシー:15:-647453184
リンクス:3:385484019
商品Aはありません。
商品Aはありません。

プログラミング | trackback(0) | comment(0) |


<<JAVA応用6日目 課題(Mapインターフェイス2) | TOP | JAVA応用4日目 課題(TreeSetのソート)>>

comment











管理人のみ閲覧OK


trackback

trackback_url
http://kononushi.blog46.fc2.com/tb.php/525-ee5cda88

| TOP |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。