- 2006-11-19 (日) 21:08
- システム開発
おしえてBP! javaプログラミングでのかぶった文字列の除去
なんか「おや?」というやり取りだったのだけど,回答が締め切られていたのでここに書いておこうかと。
質問は「String[]の要素で,重複をなくしたい」というものらしい。回答は二つ。
- ループでまわして新しい配列に現れてない要素だけをコピーしていくゴリゴリ系。
- ArrayList#contains()を使って重複してないものだけをaddしていくちょっとスマート系。
私が回答するとしたら,java.util.Setを使いなさい。これだけ。コードを書くとこんな感じです。
String[] overlapped = {"hoge", "huga", "hoge", "foo", "foo"};
java.util.Set unique = new java.util.HashSet();
unique.addAll(java.util.Arrays.asList(overlapped));
配列は既にあるわけだから,たった2行で用事は済みますね。ゴリゴリ書くなんてもってのほかです。
この質問と回答者のやり取りを見て思うのは,すでに用意されているものを知って,それを活用して新しいものを作る,という考えはないのだろうか?という疑問。これがアラン・ケイが言うところのポップカルチャーの人間?
コンピュータは人間を進化させるか – アラン・ケイ氏インタビュー -
だから’90年代になって我々は皆非常に失望した。(新世代の技術者らは)なぜただ我々が書いた論文を読んで実行しないのだと。我々が出した答えは、彼らは違うグループに属す人間なので、その論文を読めないということだ。彼らはポップカルチャーの人間だ。ポップカルチャーの人間にクラシック音楽を学ばせたかったら、彼らが自分でクラシック音楽を発明する必要がある。なぜなら(学習は)労力がかかるからだ。
こう言われている現実をかいま見た,という感覚でした。
「ネットが人々の無知を促進する可能性がある」というのは激しく同意。「何とか法案」が増えるたびに人間がアホの集まりになっているんだなぁ,と昔思っていたことがあるけど,ネットがそういう状況を促進しているかもしれない,というのはつくづく思います。
「簡単にホームページが作れますよ」「コードを書かなくてもプログラムが必要なページが作れますよ」というのは最近よく言われていることですが,そういう流れが果たして良いことなのだろうか?というのを真剣に考えてみたいところです。例えば,家とかビルとかの建築物って「簡単に」作れませんよね?素人が簡単に作った物を使いたいと思わないですよね。だからこそ建築士という免許(だったっけ?)が必要になるわけで。
こういうトホホな質問がネット上に流れていて,まともな回答を得られないままそれを受け入れてしまう人がプログラムを書いていて,それが世の中にあふれていくのかと思うと。。。ガクガクブルブルな今日この頃でした。
- Newer: Solid State Society
- Older: ガ貯金箱
Comments (Close):1
- hayashi 07-01-08 (月) 11:11
-
ちなみに、さらに配列に戻す必要があるなら、
unique.toArray()
でObject型の配列になります。