Javaのfor文とか
久々にJavaについて書いてみようかな
なんて思ってみたりする。
(古い情報が氾濫しすぎててちょっとアレなので)
for文。
まぁ、わかりやすくListで。
昔、
1.List list = new ArrayList();
for(int i = 0 ; i < list.size() ; i++){
Item item = (Item) list.get(i);
}
とか
2.List list = new ArrayList();
for(Iterator i = list.iterator() ; i.hasNext() ;){
Item item = (Item) i.next();
}
今、
Genericsとか拡張for文とか
List<Item> list = new ArrayList<Item>();
for(Item item : list){
//TODO
}
とか書ける。
Castとかしなくていいから便利。
さらに拡張for文で書いておくと、
元々、配列だった物をListにしたりSetにしたりしても
for文は書き換えなくていいので
リファクタリングが楽。
(もちろん逆も)
ただ、厳密に言うと、
ArrayListの場合、3よりも
List<Item> list = new ArrayList<Item>();
for(int i = 0 ; i < list.size() ; i++){
Item item = list.get(i);
}
こっちの方が早い。
LinkedListの場合は3の方が早い。
Iteratorの問題なんだけど、
ArrayListはランダムアクセスが早くって
その代わり、addとかremoveのコストが高い。
LinkedListはaddとかremoveのコストは
ArrayListに比べると低い
で、
Javaやってる人間には当たり前のことを
何でツラツラ書いたかというと、
最近、Rubyの紹介文で
比較対象によくされてるJavaだけど、
繰り返し処理の部分で
よく1を例に出されてる。
で、「拡張for文使えよ!」って
思ったんだけど、どうせならちゅんと纏めておこうと。
いや、個人的にRuby好きだし、
別に文句はないんだけど、
比較するのにわざと冗長に書いたJavaのコードと比較するのは
いかがな物かと思ったので書いてみた。
Rubyがいくら良くっても
そんなコードと比較されちゃうと
Javaよくわかってない人間ならまだしも
普通のJavaエンジニアは
逆に紹介文書いた方を疑っちゃって
損しちゃうんじゃないかなぁと思って・・・
(他にも今時、素のJDBCとStrutsとかと比べられてもねぇ
とか、色々あるんで気が向いたら書いてみる。)
コメント
おそらく拡張for文が取り込まれる前に作られたサンプルではないかと。
サンプルを最新の言語仕様に合わせるのを怠った(か、文章そのものが古かった)ということなんでしょうね。
投稿者: ま。 | 2006年12月19日 08:41
そうなんですよね・・・
古い記事なら別に良いのですが・・・
Ruby on Railsの紹介とかでも
出てきますからね・・・
Ruby on Rails
最初のバージョン 2004年7月
バージョン1.0 2005年12月13日
J2SE 5.0
リリース 2004年9月30日
明らかに怠ってるとしか思えないんですよね・・・
投稿者: ヨシオリ | 2006年12月19日 17:03