プロが教える店舗&オフィスのセキュリティ対策術

連投になってしまい申しわけございません。
ocj-p目前でハッキリしない問題を詰めております。

subSetメソッドについて、2冊の書籍を調べたのですが
解説がどちらも違っていてハッキリしません。
例えば以下のコードについて

public class A {
public static void main(String[] args) {
TreeSet<Integer> ts1 = new TreeSet<Integer>();
TreeSet<Integer> ts2 = new TreeSet<Integer>();
for(int i=106; i<113; i++) {
if(i%2 == 0) ts1.add(i);
}
ts2 = (TreeSet)ts1.subSet(108, true, 111, true);
ts1.add(129);
System.out.println(ts1 + "" + ts2); } }

1冊目では参照型ではないという考え方でaddはts2には反映せず
[106, 108, 110, 112, 129][108, 110]
2冊目では参照型であるためaddは相互には反映し
[106, 108, 110, 112, 129][108, 110, 129]
とあります。

どちらの考え方が正しいでしょうか?
私はずっと参照型ではない=1冊目と同じ考え方でした。

よろしくお願いいたします。

A 回答 (1件)

ocj-p受けたことないけど…



*t1とt2が指すものは別物。
*ただし、

http://download.oracle.com/javase/6/docs/api/jav …

>The returned set is backed by this set, so changes in the returned set are reflected in this set, and vice-versa. っていう設計なので、

http://ideone.com/e78Ux
http://ideone.com/MDfNN

こんな風に、両方が同じようになる。

質問のコード、実際やってみよう

http://ideone.com/Q2Cxl

[108, 110]の範囲の外に129が追加されるのでt2の方では見えない。

#って回答になっているんだろうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!

詳細なコードや参考ページ、本当にありがとうございます。
一気に理解することが出来ました。
subSetでセットした値の範囲内でないと追加はされていても
見ることはできないのですね。

・・・余談ですが、himajin100000さんの使用されているオンラインコンパイラ?は
すごくいいですね!
これからガンガン使用させていただきます。

ありがとうございました!
これで来週にでも自信持って受けにいけそうです。

お礼日時:2011/07/08 21:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!