- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
633 :デフォルトの名無しさん[sage]:2015/05/28(木) 06:07:52.40 ID:8cEiN+lf - >>629
LinkedListのgetは毎回先頭から要素を舐めるので、うっかり for (int i = 0; i < list.size(); i++) list.get(i); なんてことをやろうものならO(N^2)だ 仮にアプリの作りがまずくて、アプリへの要求の仕方によって 悪い奴が意図的にこのクソ重いループを実行させる方法があるなら、 アプリのDoS脆弱性と言われても仕方ないレベル
|
- VB.NET質問スレ(Part42) [転載禁止]©2ch.net
319 :デフォルトの名無しさん[sage]:2015/05/28(木) 16:29:00.09 ID:8cEiN+lf - そんなもんスクリプト言語なら一瞬でできるだろ
VBで作るのは馬鹿の一つ覚え
|
- VB.NET質問スレ(Part42) [転載禁止]©2ch.net
320 :デフォルトの名無しさん[sage]:2015/05/28(木) 16:38:07.41 ID:8cEiN+lf - つかVBで作るにしても、ファイル名の連番部分を正規表現でキャプチャして数字取り出すだけだよね
非常に単純な処理のはずだけど、データテーブルなんて一体何に使うんだ まあそもそも出来合いのリネームツールを使えという話ではあるが
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
636 :デフォルトの名無しさん[sage]:2015/05/28(木) 17:57:14.08 ID:8cEiN+lf - さっさとSWTに乗り換えましょう
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
638 :デフォルトの名無しさん[sage]:2015/05/28(木) 20:18:32.34 ID:8cEiN+lf - >>637
「LinkedListはクソ」じゃなくてインターフェイスの設計が間違ってると言ってるんだよ。 ただList<T>を受け取っても、それがgetを(実用的に)サポートしてるかどうかは型チェックしてみないとわからない。 オブジェクト指向の設計として明らかに破綻している。 そりゃあまり重要でない性質ならわざわざ型で区別しないことも多いけど、 「インデックスによるランダムアクセスをサポートしているかどうか」というのはコレクションにとって極めて重要な性質。 それに対して、IterableやCollectionになくてListにあり、かつ実装依存でない性質って 「要素を順方向、逆方向に辿れる」だけ。そんなの、ランダムアクセスの可否に比べればほとんど役に立たない。 ちなみに後発の.NETではその失敗からListはランダムアクセスのためのインターフェイスと定義され、 LinkedListはListを実装しない。
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
642 :デフォルトの名無しさん[sage]:2015/05/28(木) 21:19:05.95 ID:8cEiN+lf - >>640
で、実際ListIteratorを使ったことある?
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
644 :デフォルトの名無しさん[sage]:2015/05/28(木) 21:36:29.41 ID:8cEiN+lf - ListIteratorはIteratorは別のもので、Listをリスト足らしめている根源なんだけど、
そんなことも知らないでListの概念云々言ってたの?
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
647 :デフォルトの名無しさん[sage]:2015/05/28(木) 21:53:47.84 ID:8cEiN+lf - >>646
そうだよ。だからListIteratorを使ったことがあるかと聞いてるの。 ないならgetの付いたCollectionとしてしかListを使っていないことになるから、 即ちランダムアクセスのできないListには意味がないということ。 とはいえ実際にはCollectionsの各種アルゴリズムの実装などでListIteratorは内部的に活用されてるので、 決して意味がないわけではないんだけどね。 ただ程度問題として、比較的使用頻度の低いリンクリストのために多くのユーザーにとっての利便性を非常に大きく損なう設計にするのは 適切だろうか、ということ。 Javaが内部的に使ってるだけなら結局Oracleが頑張ればいいだけだしね。
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
652 :デフォルトの名無しさん[sage]:2015/05/28(木) 22:18:43.06 ID:8cEiN+lf - >>650
いや、パフォーマンスを問題にしないならそもそもLinkedListなんて必要ないじゃん… 「LinkedListは必要である」という前提で話をする以上、パフォーマンスは無視できないよ
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
655 :デフォルトの名無しさん[sage]:2015/05/28(木) 22:40:21.15 ID:8cEiN+lf - >>654
関数型ならともかく、普通Javaみたいな言語で特にパフォーマンス気にしないときとりあえずArrayList使うでしょ。 あえてLinkedListを使うのは特にパフォーマンスを意識している場合だろ? その作法はパフォーマンスの面でも正しい。 なぜなら、一般的には連続アクセスや最後への追加削除と比較して、途中への挿入削除の頻度は低いから。 もしどっちかに統一するとすれば、全体としてはArrayListの方が間違いなく速い。どちらか選ぶなら答えは明らか。
|
- ★★Java質問・相談スレッド173★★ [転載禁止]©2ch.net
656 :デフォルトの名無しさん[sage]:2015/05/28(木) 22:54:10.73 ID:8cEiN+lf - つまりLinkedListを使うときっていうのは、
そのアクセス効率の悪さ(getは論外だけど、Iteratorも遅いよ)やメモリ使用量の多さ、GCへの負担を受け入れてもなお メリットがあるほど挿入削除が多いことがわかっている場合というわけ。 それほどまでにパフォーマンスに配慮しながらgetは気にしないなんてありえないよね?
|