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

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

スポンサー広告 |


2011/06/30 (Thu) JAVA応用3日目(LinkedListとSetインターフェイス)

前日のListインターフェイスの続きと、Setインターフェイスの前半。
Setでは追加が成功したかどうかがBooleanの値で返ってくるというのが面白い。

◆LinkedListクラス
◆LinkedListの主要メソッド
◆サンプルコード
◆Listクラスのまとめ
◆Setインターフェイス
◆HashSetクラス
◆HashSetクラスのコンストラクタ
◆HashSetクラスの主要メソッド
◆クラス生成
◆サンプルコード

LinkedListクラス

頻繁にデータの更新がある場合に向いているクラス。
各要素は前後のデータとの関係性(リンク)を保持している。
スタックやキューに向いている。

LinkedListの主要メソッド

poll() 要素を取り出し削除する(get()+remove())。キューに向いている。
pop() スタックから要素を取得する。
push() スタックへ要素を格納する。

要素の追加はArrayList同様

LinkedList lst = new LinkedList();
lst.add("AAA");
lst.add("BBB"); //←この時点でAAAとのリンクができる

サンプルコード

package test;

import java.util.LinkedList;

public class Test {
public static void main(String[] args) {
LinkedList lst = new LinkedList();
lst.add("AAAAA");
lst.add("BBBBB");
lst.add("AAAAA");
lst.add("CCCCC");
lst.add(2, "ZZZZZ");
for (int i = 0; i < lst.size(); i++) {
System.out.println("[" + i + "]" + lst.get(i));
}
int idx = lst.lastIndexOf("AAAAA");
System.out.println("最後に出現した\"AAAAA\"は[" + idx + "]番目です");
}
}

実行結果

[0]AAAAA
[1]BBBBB
[2]ZZZZZ
[3]AAAAA
[4]CCCCC
最後に出現した"AAAAA"は[3]番目です

Listクラスのまとめ

・Listクラスを使って配列のように要素を扱うことができる。
・配列とは異なりハコの大きさは自動的に拡張される(データの件数が分からなくても格納可)。
・要素に対してアクセスするにはメソッドを使う。
ArrayListは要素へのランダムアクセスを得意とする。
LinkedListは要素の削除や挿入を得意とする。

Setインターフェイス

要素の重複を許可しない
nullを格納できる(ただし1件のみ)
順番の概念が無い(何番目を取得するということが出来ない)

実装するクラスとして、HashSet、LinkedHashSet、そしてSortedSetインターフェイスを実装したTreeSetがある。

使用例:重複を除いたセットを作りたい場合など。

Aリスト
社長
部長
係長
係長




→Setを使うと

Setリスト
社長
部長
係長


このように重複を除いてセットを作ることが出来る。

HashSetクラス

集合の中に同一要素が含まれるかをチェックするために利用されることが多い。

HashSetクラスのコンストラクタ

HashSet()
HashSet(Collection)
HashSet(int)
HashSet(int,float)

→floatは負荷係数。初期値は0.75(75%)。75%の要素が入るとハコが拡張される。要素数が分かっている場合は要素数をあらかじめ指定して、負荷係数は「1」にしてしまってもよい。

デフォルトの場合初期領域は16。

HashSetクラスの主要メソッド

boolean add(Object) → 要素として存在しない場合に格納しtrueを返す。
Iterator iterator()
bookean remove(Object) → 要素を指定して削除できればtrueを返す。

クラス生成

HashSet hash = new HashSet();

HashCodeが計算され要素群に格納される

hash.add("AA");
hash.remove("AA");

サンプルコード

package test;

import java.util.HashSet;
import java.util.Iterator;

public class Test {
static String[] itemList = { "商品A", "商品E", "商品C", "商品Z", "商品A" };

public static void main(String[] args) {
boolean sts = false;
String item = null;

HashSet hashSet = new HashSet();
System.out.println("商品の登録");

for (int i = 0; i < itemList.length; i++) {
item = itemList[i];
sts = hashSet.add(item);
if (sts) {
System.out.println(item + "の登録に成功しました。" + "HashCode:"
+ item.hashCode());
} else {
System.out.println(item + "の登録に失敗しました。" + "HashCode:"
+ item.hashCode());
}
}

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

// HashCodeから反復子を取得
Iterator it = hashSet.iterator();

//次の要素があるかの判定(無ければfalseが返されるのでループを抜ける)
while (it.hasNext()) {
String key = it.next();
System.out.println(key + ":" + key.hashCode());
}

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

//商品Aを再削除
sts = hashSet.remove("商品A");
if (sts) {
System.out.println("商品Aを削除しました。");
} else {
System.out.println("商品Aはありません");
}
}

}

実行結果

商品の登録
商品Aの登録に成功しました。HashCode:21651302
商品Eの登録に成功しました。HashCode:21651306
商品Cの登録に成功しました。HashCode:21651304
商品Zの登録に成功しました。HashCode:21651327
商品Aの登録に失敗しました。HashCode:21651302

商品名:HashCode
商品E:21651306
商品C:21651304
商品Z:21651327
商品A:21651302
商品Aを削除しました。
商品Aはありません

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


<<歪み | TOP | JAVA応用2日目(コレクションフレームワークとArrayList)>>

comment











管理人のみ閲覧OK


trackback

trackback_url
http://kononushi.blog46.fc2.com/tb.php/520-1a469ebe

| TOP |

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