JAVAのジェネリクスでデータ構造とアルゴリズム
- 1 :デフォルトの名無しさん:2007/05/07(月) 20:35:08
- なんか気持ちいいですね。
マイライブラリを作りたくなりますね。
- 2 :デフォルトの名無しさん:2007/05/07(月) 22:00:51
- ふはー
- 3 :デフォルトの名無しさん:2007/05/08(火) 01:54:08
- 手垢の付いたテーマだな
- 4 :デフォルトの名無しさん:2007/05/08(火) 05:14:30
- Javaのジェネリクスはにせもんとか聞くが、stlとかとはなにが違うんだっけ?
- 5 :デフォルトの名無しさん:2007/05/08(火) 06:50:35
- 久々に速度比較してみた。まだJavaはこんなに遅いのか。。
-- C++ --
vector<int> v, v2;
for(int i = 0; i < 2000000; ++i){
v.push_back(i);
}
for(int i = 0; i < 2000000; ++i){
v2.push_back(v[i]);
}
-- C# -- C++より2倍くらい遅い
ArrayList v = new ArrayList(), v2 = new ArrayList();
for(int i = 0; i < 2000000; ++i){
v.Add(i);
}
for(int i = 0; i < 2000000; ++i){
v2.Add(v[i]);
}
-- Java -- C++より5倍くらい遅い
List<Integer> v = new ArrayList(), v2 = new ArrayList();
for(int i = 0; i < 2000000; ++i){
v.add(i);
}
for(int i = 0; i < 2000000; ++i){
v2.add(v.get(i));
}
- 6 :デフォルトの名無しさん:2007/05/08(火) 07:22:38
-
3GのCPUと1Gのメモリなら、実際何秒の差がでるよ?
2倍とか5倍とかアホくせーわ
- 7 :デフォルトの名無しさん:2007/05/08(火) 08:07:49
- おっ、ぴたり3G/1Gだよ。1秒くらい差が出るね。というか比の問題だろ。
2倍/5倍を誤差と言えるぬるい環境でコーディングしてる奴は反応しなくていいよ。
- 8 :デフォルトの名無しさん:2007/05/08(火) 08:37:54
- >>まだJavaはこんなに遅いのか。。
まだというかもうこれ以上Javaは速くならんよ
>>C++より5倍くらい遅い
そのコードでほんとに5倍も差が出るか?
- 9 :デフォルトの名無しさん:2007/05/08(火) 09:10:41
- 実際の現場なんて6みたいな感覚のレベルの奴であふれてるしいいんじゃねーの
- 10 :デフォルトの名無しさん:2007/05/08(火) 09:27:41
- それ、最初に収まるサイズを確保してから実体のコピーをさせたらどうなの?
実用的なコードで比較するべきだと思うのだが
- 11 :デフォルトの名無しさん:2007/05/08(火) 09:45:53
- C#は知らんが、そのJavaのコードはautoboxingかかってるから、
どう考えてもC++と比べたら遅そう。
- 12 :デフォルトの名無しさん:2007/05/08(火) 10:41:59
- アホ臭かったりゆるいと思うようなら来なくていいじゃん。
困ってないんでしょ?
x2やx5で困ってる奴だけ来ればいいよ。
- 13 :デフォルトの名無しさん:2007/05/08(火) 11:56:56
- 普通だとそれってSunのHotSpotVMだと、コンパイルされないんじゃないかなと思って、
調べたけど、最近はUseOnStackReplacementって不要?
JDK6.0u1 Windows 32bit版
そのまま: 1.7秒
Listのサイズ指定: 1秒
Listサイズ指定+VMのオプション指定: 0.65秒
VMオプションは-server -XX:NewRatio=2 -XX:+DoEscapeAnalysis
どれにUseOnStackReplacementつけても、
殆ど効果が分からなかった。
まあgenericsとなんの関係もないけど。
- 14 :13:2007/05/08(火) 11:57:44
- 書き忘れた
-XX:+UseCompilerSafepointsも一緒に指定してます。
- 15 :デフォルトの名無しさん:2007/05/08(火) 13:16:02
- stlだと、サイズ指定しなくても、156msec。
まあ、こういうのが積み上がって、最終的にJavaアプリはもっさりになるんだろうね。
- 16 :デフォルトの名無しさん:2007/05/08(火) 16:51:59
- 仮想関数の呼び出しはC++に比べて数倍速いので問題ない。
- 17 :デフォルトの名無しさん:2007/05/08(火) 21:49:33
- わずかな処理時間の短縮より生産性向上のほうが重要
- 18 :デフォルトの名無しさん:2007/05/08(火) 22:07:26
-
っていうのが最近の傾向だわな
- 19 :デフォルトの名無しさん:2007/05/08(火) 22:35:56
- >>17
たいへんだねぇ、頭悪いと
- 20 :デフォルトの名無しさん:2007/05/08(火) 23:45:17
- 生産性? そういうのは生産なんかしていない。 単なる労働の消費。
- 21 :デフォルトの名無しさん:2007/05/09(水) 00:52:34
- いいぞ
その調子だ
- 22 :デフォルトの名無しさん:2007/05/09(水) 01:13:59
- で
データ構造とアルゴリズムはどうした?
- 23 :デフォルトの名無しさん:2007/05/09(水) 07:31:23
- どうせ遅いなら、Javaよりもっと楽に書けるRubyでいいじゃんみたいな傾向は
もっともだと思う。住み分けはC++とRubyくらいで、あとはいらないな。
- 24 :デフォルトの名無しさん:2007/05/09(水) 09:56:33
- メインテナンス性も考えたらやっぱりJavaでいいんだけど
Genericsの話題に戻すと
----対応前
List list = new ArrayList();
list.add(new Hoge());
Hoge h = (Hoge)list.get(i);
----対応後
List<Hoge> list = new ArrayList<Hoge>();
list.add(new Hoge());
Hoge h = list.get(i);
----
だろ?キャストしなくて良いだけじゃん?
やたらコーディング量だけ増えて面倒なのはtemplateと変わらんし
汎用性無くなる分templateに負けてる
- 25 :デフォルトの名無しさん:2007/05/09(水) 10:05:12
- Javaのジェネリクスの利点って、キャストしなくていいってだけだったのか!
- 26 :デフォルトの名無しさん:2007/05/09(水) 13:11:47
- C言語の#define もそうだけど
C++のtemplateは強力すぎるのよ。
他人が全く読めないコードが作れてしまうくらいにね。
強力すぎるから使い方に お作法 が必要になる。
まず、プロジェクトの作法を決めないといけない。 といっても、まあ STL以外にtemplate使わないでね
で終わる話だけどさ。
- 27 :デフォルトの名無しさん:2007/05/09(水) 13:52:04
- >>25
現実的にはそうじゃない?
- 28 :デフォルトの名無しさん:2007/05/09(水) 21:09:38
- タイプセーフだろ
- 29 :デフォルトの名無しさん:2007/05/09(水) 23:11:01
- JavaのGenericsはJava厨からも評判悪い気がするが。
- 30 :デフォルトの名無しさん:2007/05/09(水) 23:17:06
- C++のtemplateで挫折したやつが多いんじゃね?
- 31 :デフォルトの名無しさん:2007/05/09(水) 23:35:56
- だろ?
なんでまたSTLの悪夢を見なきゃならんのかと・・・w
- 32 :デフォルトの名無しさん:2007/05/09(水) 23:41:19
- そんな難しいかなあ。stl。コツつかめば簡単だし、
そもそもモデルがJavaのコレクションフレームワークよりずっと
強力にできてると思うけどなあ。
- 33 :デフォルトの名無しさん:2007/05/10(木) 00:01:15
- 洗練されてはいないがな
- 34 :デフォルトの名無しさん:2007/05/10(木) 01:24:41
- >>24
コーディング量増えるような仕組みを作ったのは
その方が工数増えて客からぼったくれるからだよ
- 35 :デフォルトの名無しさん:2007/05/10(木) 08:53:22
- いやもちろん洗練されてる感じだぞ。
- 36 :デフォルトの名無しさん:2007/05/10(木) 11:04:30
- 値を変えないことを保証する属性を追加して、
Genericもcovariantとして扱えるようにして欲しい。
- 37 :デフォルトの名無しさん:2007/05/10(木) 20:41:39
- じぇねりくすとかんけーねーじゃーん
- 38 :デフォルトの名無しさん:2007/05/11(金) 21:10:04
- Javaが速かったら、ハードで金とれねーじゃん。
- 39 :デフォルトの名無しさん:2007/05/13(日) 17:26:43
- >>5
なんでC#はジェネリック使ってないんだ?
ジェネリック使ってないせいでボックス化が生じるから、速度落ちるのは当然。
- 40 :デフォルトの名無しさん:2007/05/13(日) 20:04:32
- >>39
.NET Framework 2.0 以前のC#は、ジェネリック使えないのよ
- 41 :デフォルトの名無しさん:2007/05/14(月) 02:29:42
- 効率だの何だのインテリぶったつまらない大人の考え方だ。
オレは勇者として最速のコードを目指す!
- 42 :デフォルトの名無しさん:2007/05/14(月) 02:34:46
- 勇者じゃだめだろ
最速を目指すなら武闘家になれ
- 43 :デフォルトの名無しさん:2007/05/14(月) 03:17:41
- はぐれメタルに転職しろっつーの
- 44 :デフォルトの名無しさん:2007/05/14(月) 20:46:48
- 体育会系は嫌いだ
- 45 :デフォルトの名無しさん:2007/05/14(月) 21:13:30
- >>40
ならなんで.NET Framework 2.0を使わない?
- 46 :デフォルトの名無しさん:2007/05/16(水) 15:27:14
- 問題1:平均点計算
点数を入力して、平均点を出力するフローを答えなさい[入力した点数が0より小さい時終了する]
問題2:合計
1+(1+2)+(1+2+3)+・・・(1+2+・・・+10)を計算し、計算結果を出力するフローを答えなさい
の2問のフローチャートがどうしてもわからないので何方か解る方がいましたら教えてください
- 47 :デフォルトの名無しさん:2007/05/16(水) 18:00:28
- C#だと値型のコレクションは
ジェネリック使ったら大幅に速くなるはず
- 48 :デフォルトの名無しさん:2007/05/18(金) 00:52:12
- >>15
ほとんど全てautoboxingに伴うメモリ確保の時間だから,
積み上がってもっさりにはならんだろ.
CPU 1.86Gでも0.66秒だったし.
しかし,スコア見て泣けてくるけど,
こういうのってArrayListを外に出さなければ
エスケープ解析で速くなったりするの?
- 49 :デフォルトの名無しさん:2007/05/20(日) 00:14:30
- ベンチだから禁じ手かも知れないけど、
ループ内でAutoboxingが働かないよう書き換えて、
ベンチマークで使っているループを丸ごと1つのメソッドに入れて、
そのメソッドを10回ほど実行させて、
で、あらためてメソッドを1回実行する時間を計るとだいぶ違うんじゃないかな。実行時には-server 付けて。
- 50 :デフォルトの名無しさん:2007/05/20(日) 00:28:19
- ってゆーかー
ジェネリクスでデータとアルゴリズムだろ今スレは――――!!!!
- 51 :デフォルトの名無しさん:2007/06/12(火) 15:30:33
- いっそプリミティブ型ごとにArrayListを作ったらいいじゃないかな。かなりベタだけど
ListArrayInteger / ListArrayLong / ListArrayDouble
参照型は今のジェネリックで問題はないだろう。
- 52 :デフォルトの名無しさん:2007/06/12(火) 19:39:15
- つ commons primitives
- 53 :デフォルトの名無しさん:2007/06/15(金) 04:14:08
- つ ttp://trove4j.sourceforge.net
- 54 :デフォルトの名無しさん:2007/06/15(金) 04:15:08
- そうだジェネリックス活用して俺に分かりやすく
逆写像ソートの解説してもらえないだろうか?
何か配列使った実装だとこんがらがって
- 55 :デフォルトの名無しさん:2007/06/17(日) 21:11:53
- ジェネリックス関係ね〜
- 56 :デフォルトの名無しさん:2007/08/18(土) 22:24:53
- 自分でGenericsつかってプログラミングしようとするとErasureのせいでけっこうめんどい
- 57 :デフォルトの名無しさん:2007/11/07(水) 23:36:16
- ダウンキャストしなくていいのと型安全性が確保されれば十分じゃん
- 58 :デフォルトの名無しさん:2008/02/08(金) 21:20:45
- Javaでじぇねティックアルゴリズムするのかと思った。
Genericsか
- 59 :デフォルトの名無しさん:2008/02/11(月) 12:49:24
- C#に比べてJavaのジェネリックってすごくややこしいしメリットも少ないな
実装がシンプルなだけ
- 60 :デフォルトの名無しさん:2008/02/11(月) 13:59:03
- メリット少ないか?
- 61 :デフォルトの名無しさん:2008/02/11(月) 16:29:16
- ただのマクロだろ
- 62 :デフォルトの名無しさん:2008/02/11(月) 16:33:02
- で、メリット少ないか?
- 63 :デフォルトの名無しさん:2008/02/16(土) 21:32:37
- Jakatrta Commons CollectionsがGenericsに対応すればもっと便利になるのに
- 64 :デフォルトの名無しさん:2008/02/17(日) 00:06:29
- Java Genericsはコレクションフレームワークのように
作ったものを使うのは容易だが
作るのは非常に大変だわい
- 65 :デフォルトの名無しさん:2008/02/23(土) 23:13:41
- だから、いちいち作るの面倒だし、みんなが使えるようにしてある。
- 66 :デフォルトの名無しさん:2008/04/06(日) 20:38:27
- test
- 67 :デフォルトの名無しさん:2008/04/22(火) 22:10:17
- test
- 68 :デフォルトの名無しさん:2008/07/22(火) 20:13:45
- TextSS
- 69 :デフォルトの名無しさん:2008/07/24(木) 01:53:11
- Hoge hoge = SingletonS2Container.getComponent(Hoge.class);
こういうの見ると便利だなと。
データ構造とアルゴリズム関係無いけど。
- 70 :デフォルトの名無しさん:2008/11/12(水) 23:45:11
- じぇねりくすさいこー
- 71 :デフォルトの名無しさん:2009/01/01(木) 13:52:19
- > 6 名前:デフォルトの名無しさん [sage]: 2007/05/08(火) 07:22:38
>
> 3GのCPUと1Gのメモリなら、実際何秒の差がでるよ?
>
> 2倍とか5倍とかアホくせーわ
>
最近の子はすげぇなw 動画のエンコなんて15分だ30分、1時間なんてザラ。
仮に15分で2倍になれば30分。5倍になれば1時間15分。俺は2倍でも耐えられんね。
- 72 :デフォルトの名無しさん:2009/01/01(木) 19:09:08
- >>71
久々に挙がったと思ったら
お前は何を考えてるんだ
あとそのテストには何の意味も無いからな
- 73 :デフォルトの名無しさん:2009/01/01(木) 21:43:46
- >>72
あけおめ
まぁ、テスト自体はどうでもいいんだが数値感覚がな。
- 74 :デフォルトの名無しさん:2009/03/11(水) 20:46:15
- >>73
オヤスミ…アケオメ
<⌒/ヽ-、___
/<_/____/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄
13 KB
[ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]
取りに行ったけどなかった。次は一時間後に取りに行くです。新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)