Java入門・初心者質問スレ Part.6

■ このスレッドは過去ログ倉庫に格納されています
2017/12/21(木) 00:24:33.33ID:E/ADCCn6
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.5
http://mevius.2ch.net/test/read.cgi/tech/1506675205/
2018/02/03(土) 18:36:59.57ID:T/IRCOLF
>>665
ありがとうございます
とりあえずやってみたらそのまま表示されただけだったので
面倒なので諦めます
668デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:00:05.99ID:YCx21dTa
>>666
意図を明確にするためにListインターフェースを使うべきじゃないよね
2018/02/03(土) 19:06:33.31ID:LDloXLSS
>>655です
>>659 >>663 >>664 >>666 >>668
ありがとうございました。LinkedListはLinkedListということで
ListはΟ(1) でLinkedListはΟ(N) なので自分や他人が混乱しないためにもLinkedListのままで良いと・・・多分
2018/02/03(土) 19:08:07.71ID:uBCfwyBi
使うべきかどうかは文脈によるが、あえて一般化するならListインターフェースにすべき。
データ構造をどうすべきかは、インスタンス化のときだけは関心があるが、実際にアクセスしたり挿入したりするときに気にならないようにしておくのが抽象化という考え方。
2018/02/03(土) 19:10:55.15ID:uBCfwyBi
>>669
Listはインターフェースなので、計算量とかない。
そのロジックでLinkedListで宣言するならArrayListもArrayListと宣言すべき。
>>670にも書いたが、何を抽象化したいかはときと場合によるので、どっちがいいとか悪いとかない。
ただ、一貫性がないのは悪いと言えよう。
2018/02/03(土) 19:20:16.63ID:ZHqj1jBJ
>>671
それは極論
現実にはほとんど全てのケースにおいてリンクリストより配列ベースのリストの方がパフォーマンスやメモリ効率に優れているんだから、
リンクリストの存在なんか無視してListの実装は全てランダムアクセス可能であるという前提で作るのは実用的判断としては悪くない
.NETは現にそうなってるね
673デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:51:19.18ID:YCx21dTa
>>671
抽象データ構造として計算量はあるべきだと思うよ
ArrayListはインデックスでアクセスするならArrayListを使うべきだよ
674デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:52:59.73ID:YCx21dTa
JavaのListインターフェースはゴミと言っていいでしょう
675デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:55:21.26ID:YCx21dTa
うそです、言い過ぎました本当にごめんなさい
676デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:56:30.47ID:YCx21dTa
MapでさえもHashMapとTreeMapで計算量違うんで
Listインターフェースの実装によって計算量が違うのも
認めるべきだと思い直しました
677デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:57:51.86ID:YCx21dTa
違うのか、ListインターフェースもMapインターフェースも
ゴミだという結論も出せるのか
678デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:59:28.16ID:YCx21dTa
インターフェースは奥が深いということで
2018/02/03(土) 21:24:43.36ID:VDv79Nx+
>>667
変だなと思ってこちら(Windows10)でやってみたら確かにできなかった。
作ったプログラムはこんなやつだ。

public class EscSeq {
 public static void main(String[] args) {
  for (int i = 31; i <= 37; i++)
   System.out.println("\u001b[" + i + "mABC\u001b[0m");
 }
}

こういう出力になった。

[31mABC[0m
[32mABC[0m
[33mABC[0m
[34mABC[0m
[35mABC[0m
[36mABC[0m
[37mABC[0m

ところが実行時に以下のように Perl の何もしないプログラムにただ出力を渡してそのまま出力させてみたら色が付いて出た。

java EscSeq | perl -pe ""

この perl は Cygwin の perl だ。とすると Cygwin のライブラリが実行時に何かしているのかも知れない。
とすると同じことができれば Java でも同じようになるだろうとは思うが、今のところ俺にはやり方がわからない。
2018/02/03(土) 21:27:46.33ID:VDv79Nx+
>>667
もう一つ色を出す方法を発見。プログラムの出力をファイルにリダイレクトしてからそのファイルを type コマンドで出力したら色が出た。
とすると java コマンドが何か変なのかも知れないが、どういうことなのかよくわからないね。
2018/02/03(土) 22:04:14.38ID:Vrj5+lre
適切な抽象度合いは文脈によるって言ってんだろうが
なにがいいとか悪いとかない
2018/02/03(土) 22:05:12.43ID:hgzMgIyl
>>672
配列ベースは概念は簡単で便利だけれども、削除や挿入のコストは考えないといけないのではないでしょうか?
そういうときはリンクリストベースの方が適している
2018/02/03(土) 22:25:13.44ID:aUhNWyY8
>>682
いや、途中削除挿入が少々あったとしても配列リストのほうがほとんどの場合において速い
リンクリストってとんでもなくメモリ効率の悪いデータ構造なんだよ
2018/02/03(土) 22:38:51.39ID:aUhNWyY8
ついでに言っておくと、Listのaddやremoveを使ってLinkedListにインデックス指定して途中への挿入や削除をしたらO(N)だ
LinkedListのパフォーマンスの恩恵を受けるためには必ずListIteratorを使わなければならない
逆にArrayListでわざわざListIteratorを使う意味なんかないわけで、そういう点でも両者を一括りにして抽象化する意味はほとんどないのよ
685デフォルトの名無しさん
垢版 |
2018/02/03(土) 23:29:16.51ID:N6/Ci9xF
LinkedListはLinkedHashMapのためのクラス。
LinkedHashMapは、LRUとかでよく使う。
2018/02/03(土) 23:41:38.70ID:hgzMgIyl
>>683
配列ベースでの挿入や削除は、オブジェクトのコピーが延々と繰り返される点を考えれば、重大なコストですよ
単にコピーするだけならまだしも、コピーコンストラクタが働くことは、これは大きなコストだから、できるだけ避けないといけないのでは?
これは私が C++er だから考えてしまうことなのだろうか?

リンクリストでの挿入や削除では、コピーコンストラクタは働かない(既存のオブジェクトに手が加わらない)。
リンクリストの効率が悪い、というのは、リンクリストのメリットに触れない、一面的な意見に思えます
2018/02/03(土) 23:45:32.04ID:hgzMgIyl
>>684
>Listのaddやremoveを使ってLinkedListにインデックス指定して途中への挿入や削除をしたらO(N)だ

それはおかしい、抽象オブジェクトやインターフェースを介しているからといって、実装側の効率が極端に変わることはありえない
List がリンクリストな実体を指しているのなら、そのメソッドは、リンクリストの効率に従うはず
2018/02/04(日) 00:58:59.24ID:fXO59JwO
>>686
そうだけど Java の場合は参照だから C++ に置き換えて考えればポインタの配列になる。
だからコストは掛かるんだけど思ったほど遅い感じがしない。

それと実際の実装は一つ追加したら即配列全体を作り直すみたいになっておらず、
大きめに配列確保しておいてそれをオーバーするまでは同じ配列を使い続けて
その中でのコピーになるから要素数が少ないと気になるほど遅くならない。
2018/02/04(日) 01:45:48.83ID:0M2nQfAn
>>687
挿入や削除の前に、指定されたインデックスの位置までポインタを手繰らないといけないからね
getもそうだけど、Listインターフェースに宣言されているから実装せざるを得ないだけで
本来存在すべきではない操作だよ
690デフォルトの名無しさん
垢版 |
2018/02/04(日) 05:00:56.17ID:2KjySip0
>>685
いいこと言った
2018/02/04(日) 05:35:13.14ID:p5zvJFKF
>>689
>挿入や削除の前に、指定されたインデックスの位置までポインタを手繰らないといけないからね
なるほど
たしかに二分探索を実装する必要があるなら、それは配列ベースになるだろうね
2018/02/04(日) 08:42:48.25ID:jtpbEfK1
Javaで巨大なコレクションの途中に挿入するコストが気になるっていったいどんなプログラムなんだろう
2018/02/04(日) 09:30:01.09ID:p5zvJFKF
>>692
巨大なコレクションだからこそ、List の挿入削除の実装に気を使うべきなんですよ
1000件 2000件の小さなリストならどっちでもいい
2018/02/04(日) 09:39:06.01ID:jtpbEfK1
>>693
だからそんな巨大で変更可能なコレクションを使う場面ってどんな時なのかなって
2018/02/04(日) 10:47:54.78ID:mA+9NwN1
ないよ。
普通そこはクエリの調整のほうが効きやすいし分業しやすいから。
しかもそんな長大レコードの途中にオンメモリで値挿入とか狂気じみてる。
2018/02/04(日) 11:37:52.68ID:S3cdJ5Jy
百歩譲って巨大なコレクションの途中へ挿入する必要があったとして、
挿入位置が予め決まっていなければリンクリストのメリットはないわけだが(689の理由で)、そんな状況あるのか?
挿入位置までのリンクリストのシーケンシャルスキャンのコストが無視できるくらい沢山の要素をまとめて挿入するのだとしても、
その場合は配列でブロックコピーした方が速そうだな
2018/02/04(日) 11:50:08.04ID:S3cdJ5Jy
ソート済みの巨大なリスト同士をマージするときには使えるかな?
と思ったけど新しい配列リスト作ってそこに追加してった方が速いだろうな
インプレースで処理できるといっても、もともとリンクリストはメモリをバカ食いするから本末転倒だし
2018/02/04(日) 11:57:14.26ID:p5zvJFKF
>>695
オンメモリとは限らないのでは?
普通にリンクリストでデータ構造が実装されている例はいくらもあると思うよ、二分木、多分木になる場合や
順序関係・比較関数が単純でない場合は特に

まあ List でまとめる必要ははなからないことは自明だけれども
699デフォルトの名無しさん
垢版 |
2018/02/04(日) 12:07:50.83ID:GvS2o5m7
>>694
そこでLinkedHashMapですよ
2018/02/04(日) 16:04:57.04ID:fXO59JwO
ま、何億件とかデータが巨大なら最初からRDB等を使った方が何も考えずに済んで良いかもね。
まあでも巨大かどうかは動かすコンピュータのスペックによるか。億単位だろうが京単位だろうが
軽く動いてしまうマシンはあるだろうし。
701デフォルトの名無しさん
垢版 |
2018/02/04(日) 17:06:48.49ID:XK4swbja
Test
2018/02/05(月) 12:43:28.93ID:nOjIwE3H
メモリプールとかで使うのかも
2018/02/07(水) 09:40:42.83ID:3I7vHPZK
あー。あの大阪によくある。
2018/02/07(水) 12:31:35.21ID:3a579GGi
>>703
それはたこ焼き器やろ
2018/02/07(水) 12:45:24.93ID:2VYDCh9o
モータープール、大阪でしか言わないんだよなぁ
2018/02/07(水) 21:32:24.68ID:7uNcNN/X
月極グループ
2018/02/07(水) 21:45:44.89ID:E5jit1hv
げっきょくさんは手広いよな
708デフォルトの名無しさん
垢版 |
2018/02/07(水) 21:50:59.77ID:isOebZIS
>>707
「つきじめ」って読むだぞ知恵遅れ
709デフォルトの名無しさん
垢版 |
2018/02/08(木) 00:52:45.22ID:y8xXRvXM
じめ
2018/02/08(木) 02:00:47.83ID:AXKuy5Is
ぢめ
2018/02/08(木) 15:24:48.89ID:GGxSZy0h
「つきぎめ」だろって、つっこんだら負けなの?
2018/02/08(木) 15:38:26.75ID:4mknIqIx
>>711
はい残念!
2018/02/08(木) 16:13:58.48ID:l038yywz
>>707は(なぜか変換できない)ネタだろ
って突っ込んだらダメなん?
2018/02/08(木) 16:39:10.89ID:5B+1l88d
つきじめ
はともかくつきぎめってなんだよ
2018/02/09(金) 20:41:22.83ID:TxhNGHRH
月極の読み方とは? 「月極」を「げっきょく」と読む人多数!
大人になってから知った読み間違い&意味間違い
https://gakumado.mynavi.jp/freshers/articles/11122
2018/02/09(金) 20:51:00.52ID:KKlW8Jyu
くっだらねぇレスを何日も続けるんじゃねぇよゴミカスども
ほんとゴミみてぇな奴しかおらんな
717デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:09:31.63ID:2uCfWfAn
過疎ってJavaの話題を誰も書かなかったからだよ。何かネタがあるなら君が書け。
例えプロでも初心者になり切って何か質問書いてみろ。お題でもいいぞ。
2018/02/09(金) 21:09:53.42ID:b+xlXmOU
ゴミしか使わない言語なんだからしょうがないだろ
719デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:38:03.63ID:9EA5viw/
こりゃダメだ
C#に転向するわ
2018/02/09(金) 21:47:11.01ID:2u4zZUXa
>>719
言語としての将来性を考えるならそれがいいかもね
Javaを置き換える言語はあるがC#を置き換える言語はまだない
2018/02/09(金) 21:49:51.06ID:qrKjYlTm
>>719
kotrinじゃなくて?
722デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:52:38.51ID:9EA5viw/
>>720>>721
ネットでちょこっと見たけど
C#って制御文とかクラスの使い方とかJavaとほぼ同じじゃね?
2018/02/09(金) 22:02:03.66ID:qrKjYlTm
>>722
c#2.0くらいまではね
2018/02/09(金) 22:04:37.91ID:KKlW8Jyu
C#推しの馬鹿って言語的な比較しかしないから馬鹿なんだよな
言語使うだけなら小学生でも出来る
Webサービスとして業務的な汎用性がJavaに比べてゴミだから流行らないんだよ
725デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:05:20.81ID:9EA5viw/
>>723
今はC#7だから結構変わってるのか・・・
やっぱりJavaやろっかな・・・
2018/02/09(金) 22:07:49.53ID:WMFtHau8
>>724
奴隷必死だな
727デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:10:23.32ID:9EA5viw/
>>724
レンタルサーバーで気軽に使えないんだもん
2018/02/09(金) 22:10:56.67ID:KKlW8Jyu
図星かよゴミ
馬鹿はプログラムなんかやらんでスマホでも弄ってろよ
2018/02/09(金) 22:11:25.62ID:qrKjYlTm
>>724
奴隷おつ
2018/02/09(金) 22:12:08.78ID:zG1wX+Le
>>716
だってここjavaスレだもん
731デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:12:18.12ID:9EA5viw/
>>724
奴隷さんでしたかw
732デフォルトの名無しさん
垢版 |
2018/02/09(金) 23:08:49.74ID:nN2BoaGY
>>722
そりゃMSがJavaVM作ったらSunから文句言われて怒ったゲイツがパクってWindowsに都合よくなるように改造して作ったものがC#だから当然。
当時はそうやってWindowsに囲い込もうとしたが、しかし、長いこと独占状態だったから広まるのが遅く、ほとんどWindowsでしか使われない言語になってしまった。
今はAppleのSwiftが似たような状態になっていてフリーになったのに中々広まらない。最初に変な制限があると出遅れる。
2018/02/09(金) 23:57:39.97ID:St4pWECa
>>732
javaはその逆を行こうとしてるね
2018/02/10(土) 00:05:53.34ID:dbzbK1DZ
>>733
今ではスマホアプリやゲームのクロスプラットフォーム開発は完全にC#に持っていかれたし、
LinuxのWeb開発もC#に侵食されつつあるよ
今やランタイムを同梱する場合などのライセンス問題でJavaが嫌われてC#を選ぶという、
昔とは完全に逆転した状況になってしまった
735デフォルトの名無しさん
垢版 |
2018/02/10(土) 00:08:45.80ID:l9ZzjyKP
あー。そうだけど、もうフリーのやつも広まり切った後なのでほとんど影響ないんじゃないかな。
736デフォルトの名無しさん
垢版 |
2018/02/10(土) 00:09:50.19ID:l9ZzjyKP
>>735>>733ね。
2018/02/10(土) 00:17:35.67ID:dWge4ODu
Javaが選ばれるのは、Javaの閉じたエコシステムに完結している限りにおいて、Unix開発の知識がなくてもUnixを使ったシステムが作れるからだよ
特定の技術の枠の中に閉じこもっていれば安心という意味においてはWin+VSと本質的には大差ない
Oracleが時代錯誤な独占体制を見直さない限り、長期的には今やWinから解放されライセンスもガガバガバな.NETに食われていくのは避けられないだろうね
2018/02/10(土) 04:08:17.66ID:ebSyb+8P
eclipseでメモ帳を作っています。
テキストファイルの文字列を編集可能な状態で出力したいのですが、やり方が分かりません。
Scanner(System.in)でキーボードから入力された文字列のような、そのまま直接キーボードで編集可能な文字列として出力したいのですが……。
何卒知恵を御貸しください。
お願いします。
2018/02/10(土) 04:48:47.04ID:ebSyb+8P
>>738
追記、Scanner(file名)による入力のやり方を発見しましたが、そのままSystem.inと繋げるようなやり方はできないのでしょうか?
Scanner(file名)で得た文字列をSystem.inで編集したいのです
2018/02/10(土) 06:58:24.49ID:KnoefXX3
Javaを本格的に使うと訴えられるんでしょGoogleみたいに
それじゃリスクあるからKotlinやC#使おうってなるわな
2018/02/10(土) 07:11:56.20ID:TNdj3qFT
>>738-739
HTML の、textarea のようなものを使うと簡単

eclipse にも、複数行テキストボックスのようなものがあるかな?
2018/02/10(土) 08:58:45.50ID:xv5r03JM
>>734
>>736
javaはOpenからClosedになりつつあるってことだろ
2018/02/10(土) 09:38:19.54ID:E/k4xLNo
>>719
.NET CORE2.1出てから本気出す
2018/02/10(土) 09:41:30.71ID:wviCBSHG
うちの職場はC#やめてJavaに統一した

統計はたいていMSの圧力下にあるから信用ならん
こっそりライセンス変えたり人のパソコン勝手に弄り回す会社のフレームワーク使う気になるかっての
2018/02/10(土) 10:41:49.53ID:rlZJHg3D
>>741
ありがとうございますTextAriaで解決できそうです本当にありがとうございます
2018/02/10(土) 11:05:18.27ID:xv5r03JM
>>744
Oracleよっかマシ
2018/02/10(土) 14:05:25.59ID:wviCBSHG
どこがましか?!
2018/02/10(土) 14:45:26.25ID:vDyn4qxN
>>738
マルチかよ
749デフォルトの名無しさん
垢版 |
2018/02/10(土) 16:00:43.10ID:l9ZzjyKP
>>742
しかし言語そのものは文法定義でしかなく特許があるわけでも著作権があるわけでもないので独自実装やその実装のフリー化は誰にも止められないだろう。
例えあってもパクられてちょっと違ったもの違う名前で作られて終わりだ。Javaに対するC#のようにね。
2018/02/10(土) 16:18:49.31ID:wVMdjZ3i
>>749
そんなパクリ言語選ぶくらいならc#かkotrin使うわwww
2018/02/10(土) 16:43:17.54ID:z2zG7zff
勝手に使えば?
2018/02/10(土) 16:56:56.54ID:bqVtLB0f
>>744
何作ってんの?
753デフォルトの名無しさん
垢版 |
2018/02/10(土) 16:58:39.84ID:l9ZzjyKP
>>750
C#はJavaのパクリ言語だよ。仮想マシン上で動くという所からしてパクリ。MSが全力を上げてパクるとああなる。
もちろんWindowsはMacのパクリだしMacはAltoのパクリだ。この業界は全体がパクリでできている。
2018/02/10(土) 17:05:25.59ID:pUvl4BKb
>>753
c#はjavaよりDelphi
755デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:07:08.77ID:l9ZzjyKP
別の名前の似たようなタイヤが延々と発明され続ける。その中でビジネス的にうまく行ったやつが技術的にはクソだったとしても生き残る。宣伝のうまさやタイミングが重要だ。人間は感情でしか動ていない。理屈は常に後付の正当化であり誤魔化しに過ぎない。
756デフォルトの名無しさん
垢版 |
2018/02/10(土) 17:08:09.17ID:l9ZzjyKP
>>754
それはDelphi作ってた人にやらせたからではないかな。
2018/02/10(土) 17:11:13.69ID:pUvl4BKb
>>756
そう
2018/02/10(土) 17:32:48.47ID:wviCBSHG
>>752
きわめて普通の業務用Web
2018/02/10(土) 17:34:57.94ID:wviCBSHG
C#がDelphiの血筋とかいうのはMicrosoftの強がりというか詭弁

一部にていたりノウハウを流用している部分があるというだけで
全体的にどうみてもJava
2018/02/10(土) 17:50:04.55ID:dPkktoQv
でもさ
Javaをパクったらクソが出来上がるはずだよね
でもC#はエレガントじゃん
矛盾してないか?
2018/02/10(土) 18:20:17.10ID:wviCBSHG
null値というクソをJavaから引き継いで
ほどよくクソになってるじゃないか

Delphiではもっとしっかり考慮されてたのに
考えもなしにパクった証拠
2018/02/10(土) 18:48:15.54ID:dPkktoQv
それはJava以外から引き継いだんだよ
C++やVBファミリとの付き合いがあるからね
2018/02/10(土) 19:10:56.73ID:TftZc6ZF
あるよね
2018/02/10(土) 20:26:16.00ID:wviCBSHG
付き合いがあるからってすべてのオブジェクト変数をNull許容にする必要性がおもいつかない
2018/02/10(土) 20:56:51.13ID:g3PCSUL0
当時の世間の要求に合わせて設計しただけだぞ
例えば、初期のC#に型推論がなかった理由は「当時はスクリプト言語の地位が低かったので、スクリプト言語だと思われたくなかったから」だそうだ
時代が違うんだよ
2018/02/10(土) 21:59:20.30ID:F/TP0Ynf
>>758
奴隷が必要なわけね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況