連想配列

  値のセットと列挙



少し面倒に思えますが、重要な処理なのでパターンとして覚えてしまいましょう

import java.util.* が必要です
  
// HashMap作成
HashMap myData = new HashMap();

// データ追加
myData.put( "x", new Integer(1) );
myData.put( "z", new Integer(2) );
myData.put( "y", new Integer(3) );
myData.put( "a", new Integer(4) );
myData.put( "b", new Integer(5) );

// キーのセットビューを取得
Set myKeyset = myData.keySet();

// 列挙用の Iterator を取得
Iterator myIterator = myKeyset.iterator();

// 変更
myData.put( "y", new Integer(30) );

// 列挙
String strKey = null;
Integer nValue = null;
while( myIterator.hasNext() ) {
	strKey = (String)myIterator.next();
	nValue = (Integer)myData.get(strKey);  // 値の取り出し
	System.out.println( strKey + " : " + nValue );
}
  
いくつか注意する事があります

  • 基本データ型は使えない

    • myData.put( "x", 1 ); と書くとエラーになります

  • Iterator を一行で取得する場合

    • Iterator myIterator = myData.keySet().iterator();

  • myIterator.next(); や myData.get(strKey); の戻り値の型は Object なのでキャストする

  • 登録順は保持されない

  • Iterator を取得して使用するまでに HashMap にデータを追加してはならない( 変更は可 )

    • HashMap にデータを追加した場合は必ず新しい Iterator を取得します





  配列へ変換して列挙



前述のソースコードの続きに記述します

  
int i;

Object [] myKeyArray = myKeyset.toArray();
for( i = 0 ; i < myKeyArray.length; i++ ) {
	strKey = (String)myKeyArray[i];
	System.out.println( strKey );
}

Object [] myValueArray = myData.values().toArray();
for( i = 0 ; i < myKeyArray.length; i++ ) {
	nValue = (Integer)myValueArray[i];
	System.out.println( nValue );
}
  



  ソート

TreeMap に HashMap を引き渡すだけで、処理方法は同じです

  
TreeMap mySortData = new TreeMap( myData );

// キーのセットビューを取得
myIterator = mySortData.keySet().iterator();

// 列挙
while( myIterator.hasNext() ) {
	strKey = (String)myIterator.next();
	nValue = (Integer)myData.get(strKey);
	System.out.println( strKey + " : " + nValue );
}
  

配列のソートは、Arrays クラスのクラスメソッドである sort を使用します

  
Arrays.sort(myKeyArray);
for( i = 0 ; i < myKeyArray.length; i++ ) {
	strKey = (String)myKeyArray[i];
	System.out.println( strKey );
}

Arrays.sort(myValueArray);
for( i = 0 ; i < myKeyArray.length; i++ ) {
	nValue = (Integer)myValueArray[i];
	System.out.println( nValue );
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ