X



Java入門・初心者質問スレ Part.6
■ このスレッドは過去ログ倉庫に格納されています
0639630
垢版 |
2018/01/31(水) 21:00:07.79ID:and1GARu
ありがとうございます。
今の仕事に加えて2本目の柱にすべく、いちから頑張ります。
(10年前にITにいたなんて言えない。。。)
0642スッキリ厨
垢版 |
2018/01/31(水) 23:16:50.91ID:ah9e2u9N
まずこの本で、しっかりと、オブジェクト指向を学ぶ。
スッキリわかる Java入門 第2版、2014

その次に「たのしいRuby 第5版、2016」という道筋が、鉄板!
以後は、Python, JavaScript, C#, Kotlin など、お好きな言語へ進む

評論家・作家が集まって、数十冊のJavaの本を論じる座談会でも、
議論の半分以上を、スッキリ1冊で占めるというw
0644630
垢版 |
2018/02/01(木) 12:56:12.87ID:8sYc2u5H
すみません最初でつまづいてます
Javaをインストールし、環境変数で
PATHにC:\Program Files\Java\jdk-9.0.4\binを追加したのですが、
CMDでJavacと入れても認識しません
設定がおかしいのでしょうか?
0650デフォルトの名無しさん
垢版 |
2018/02/02(金) 12:40:30.43ID:vZ7npXAS
>>644
どんな古い情報を見てやってるのかわからないけど、今はインストーラがやるからそんなパス指定する必要がないというか、やると更新の時に面倒だからやってはいけない
それ外してやったらどうなる?
0651デフォルトの名無しさん
垢版 |
2018/02/02(金) 13:16:01.06ID:7Sd8400T
え?今はインストーラがやってくれるの?いつの間にそうなったんだ?
じゃあPATHに追加しといたやつ外すか。
0653デフォルトの名無しさん
垢版 |
2018/02/02(金) 14:30:41.89ID:s+WUZnzv
JREと勘違いしてんだろ。
0654デフォルトの名無しさん
垢版 |
2018/02/02(金) 16:53:37.95ID:KuhLinCY
感情の原因はそれを感じる者自身の固定観念・価値観・自己ルール
解釈の原因は情報発信者ではなく受信者。誤解の原因も解釈者
「言葉 風紀 世相の乱れ」はそう感じる人の心の乱れの自己投影
問題解決力の低い者ほど自己防衛の為に礼儀作法やマナーを要求する
憤怒は無知 無能の自己証明。中途半端な知識主ほど辛辣に批判する
論理的思考力の低い者ほどデマ宗教フェイク迷信に感化傾倒陶酔洗脳
史上最も売れているトンデモ本は聖書。神は人間の創造物
全ては必然。偶然 奇跡 理不尽 不条理は思考停止 視野狭窄の産物
人生存在現象に元々意味価値理由目的はない
「真実は一つ」は錯誤。執着する者ほど矛盾を体験(争い煩悩)する
宗教民族領土貧困は争いの原因ではなく「理由口実動機言訳切欠」
社会問題の根本原因は低水準教育。必要なのは適切十分な高度教育
体罰は指導力・問題解決力の乏しい教育素人の独善甘え怠慢責任転嫁
死刑は民度の低い排他的集団リンチ殺人。「死ねば償える」は偽善
核武装論は人間不信と劣等感に苛まれた臆病な外交素人の精神安定剤
投票率低下は社会成熟の結果。奇人変人の当選は議員数過多の徴候

感情自己責任論 〜学校では教えない合理主義哲学〜 m9`・ω・)
0655デフォルトの名無しさん
垢版 |
2018/02/03(土) 13:09:18.63ID:LDloXLSS
ArrayListはArrayList独自のメソッドを使わなければList型で宣言すべきとあったのですが、
LinkedListも同様にList型で宣言したほうが良いのでしょうか?
0656デフォルトの名無しさん
垢版 |
2018/02/03(土) 14:40:05.82ID:3WnFr6b6
Windowsコマンドプロンプトで実行させて文字列を表示する時に
奇数行と偶数行とで文字の色を変えたいのですがどうすればできるのでしょうか?
0657デフォルトの名無しさん
垢版 |
2018/02/03(土) 15:26:30.39ID:3WnFr6b6
比較文で==を=にしててもコンパイル通ってしまうために、たまに間違えたまま気づかないことあるんだけど
間違わないようにするライフハック的なものは何かないですか
0658デフォルトの名無しさん
垢版 |
2018/02/03(土) 15:50:25.92ID:0PCikDkt
ヨーダ記法はどうなんすかね?
if (x = 0) 通っちゃう
if (0 = x) 通らない
0659デフォルトの名無しさん
垢版 |
2018/02/03(土) 15:56:11.82ID:ZHqj1jBJ
>>655
やめたほうがいい
LinkedListはgetがO(N)なので、不用意に混ぜるとパフォーマンス劣化の原因になる恐れがある
Javaのよく知られた設計上の欠陥だよ
0662デフォルトの名無しさん
垢版 |
2018/02/03(土) 16:25:54.75ID:hQBrYqp7
左辺w
0663 ◆QZaw55cn4c
垢版 |
2018/02/03(土) 16:31:05.72ID:hgzMgIyl
>>659
それは変だ、かってに混ざることはないよ
0664デフォルトの名無しさん
垢版 |
2018/02/03(土) 16:59:13.66ID:ZHqj1jBJ
>>663
混ぜたい(というか区別したくない)からListにするんだよ
常にこのコレクションの実体はLinkedListだと意識してるんならLinkedListのまま扱えばいい
その方がより「意図の伝わる」コードになる
0666デフォルトの名無しさん
垢版 |
2018/02/03(土) 18:31:16.63ID:RDoavzQ+
LinkedListの要素アクセスがO(N)なのはそういうデータ構造だから仕方ないんじゃないのか?
その代わり要素の挿入とか削除がArrayListより高速な利点があるわけだし用途によって向き不向きがあるだけ
0667デフォルトの名無しさん
垢版 |
2018/02/03(土) 18:36:59.57ID:T/IRCOLF
>>665
ありがとうございます
とりあえずやってみたらそのまま表示されただけだったので
面倒なので諦めます
0668デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:00:05.99ID:YCx21dTa
>>666
意図を明確にするためにListインターフェースを使うべきじゃないよね
0669デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:06:33.31ID:LDloXLSS
>>655です
>>659 >>663 >>664 >>666 >>668
ありがとうございました。LinkedListはLinkedListということで
ListはΟ(1) でLinkedListはΟ(N) なので自分や他人が混乱しないためにもLinkedListのままで良いと・・・多分
0670デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:08:07.71ID:uBCfwyBi
使うべきかどうかは文脈によるが、あえて一般化するならListインターフェースにすべき。
データ構造をどうすべきかは、インスタンス化のときだけは関心があるが、実際にアクセスしたり挿入したりするときに気にならないようにしておくのが抽象化という考え方。
0671デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:10:55.15ID:uBCfwyBi
>>669
Listはインターフェースなので、計算量とかない。
そのロジックでLinkedListで宣言するならArrayListもArrayListと宣言すべき。
>>670にも書いたが、何を抽象化したいかはときと場合によるので、どっちがいいとか悪いとかない。
ただ、一貫性がないのは悪いと言えよう。
0672デフォルトの名無しさん
垢版 |
2018/02/03(土) 19:20:16.63ID:ZHqj1jBJ
>>671
それは極論
現実にはほとんど全てのケースにおいてリンクリストより配列ベースのリストの方がパフォーマンスやメモリ効率に優れているんだから、
リンクリストの存在なんか無視してListの実装は全てランダムアクセス可能であるという前提で作るのは実用的判断としては悪くない
.NETは現にそうなってるね
0673デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:51:19.18ID:YCx21dTa
>>671
抽象データ構造として計算量はあるべきだと思うよ
ArrayListはインデックスでアクセスするならArrayListを使うべきだよ
0674デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:52:59.73ID:YCx21dTa
JavaのListインターフェースはゴミと言っていいでしょう
0675デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:55:21.26ID:YCx21dTa
うそです、言い過ぎました本当にごめんなさい
0676デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:56:30.47ID:YCx21dTa
MapでさえもHashMapとTreeMapで計算量違うんで
Listインターフェースの実装によって計算量が違うのも
認めるべきだと思い直しました
0677デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:57:51.86ID:YCx21dTa
違うのか、ListインターフェースもMapインターフェースも
ゴミだという結論も出せるのか
0678デフォルトの名無しさん
垢版 |
2018/02/03(土) 20:59:28.16ID:YCx21dTa
インターフェースは奥が深いということで
0679デフォルトの名無しさん
垢版 |
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 でも同じようになるだろうとは思うが、今のところ俺にはやり方がわからない。
0680デフォルトの名無しさん
垢版 |
2018/02/03(土) 21:27:46.33ID:VDv79Nx+
>>667
もう一つ色を出す方法を発見。プログラムの出力をファイルにリダイレクトしてからそのファイルを type コマンドで出力したら色が出た。
とすると java コマンドが何か変なのかも知れないが、どういうことなのかよくわからないね。
0681デフォルトの名無しさん
垢版 |
2018/02/03(土) 22:04:14.38ID:Vrj5+lre
適切な抽象度合いは文脈によるって言ってんだろうが
なにがいいとか悪いとかない
0682 ◆QZaw55cn4c
垢版 |
2018/02/03(土) 22:05:12.43ID:hgzMgIyl
>>672
配列ベースは概念は簡単で便利だけれども、削除や挿入のコストは考えないといけないのではないでしょうか?
そういうときはリンクリストベースの方が適している
0683デフォルトの名無しさん
垢版 |
2018/02/03(土) 22:25:13.44ID:aUhNWyY8
>>682
いや、途中削除挿入が少々あったとしても配列リストのほうがほとんどの場合において速い
リンクリストってとんでもなくメモリ効率の悪いデータ構造なんだよ
0684デフォルトの名無しさん
垢版 |
2018/02/03(土) 22:38:51.39ID:aUhNWyY8
ついでに言っておくと、Listのaddやremoveを使ってLinkedListにインデックス指定して途中への挿入や削除をしたらO(N)だ
LinkedListのパフォーマンスの恩恵を受けるためには必ずListIteratorを使わなければならない
逆にArrayListでわざわざListIteratorを使う意味なんかないわけで、そういう点でも両者を一括りにして抽象化する意味はほとんどないのよ
0685デフォルトの名無しさん
垢版 |
2018/02/03(土) 23:29:16.51ID:N6/Ci9xF
LinkedListはLinkedHashMapのためのクラス。
LinkedHashMapは、LRUとかでよく使う。
0686 ◆QZaw55cn4c
垢版 |
2018/02/03(土) 23:41:38.70ID:hgzMgIyl
>>683
配列ベースでの挿入や削除は、オブジェクトのコピーが延々と繰り返される点を考えれば、重大なコストですよ
単にコピーするだけならまだしも、コピーコンストラクタが働くことは、これは大きなコストだから、できるだけ避けないといけないのでは?
これは私が C++er だから考えてしまうことなのだろうか?

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

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

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

まあ List でまとめる必要ははなからないことは自明だけれども
0699デフォルトの名無しさん
垢版 |
2018/02/04(日) 12:07:50.83ID:GvS2o5m7
>>694
そこでLinkedHashMapですよ
0700デフォルトの名無しさん
垢版 |
2018/02/04(日) 16:04:57.04ID:fXO59JwO
ま、何億件とかデータが巨大なら最初からRDB等を使った方が何も考えずに済んで良いかもね。
まあでも巨大かどうかは動かすコンピュータのスペックによるか。億単位だろうが京単位だろうが
軽く動いてしまうマシンはあるだろうし。
0701デフォルトの名無しさん
垢版 |
2018/02/04(日) 17:06:48.49ID:XK4swbja
Test
0708デフォルトの名無しさん
垢版 |
2018/02/07(水) 21:50:59.77ID:isOebZIS
>>707
「つきじめ」って読むだぞ知恵遅れ
0709デフォルトの名無しさん
垢版 |
2018/02/08(木) 00:52:45.22ID:y8xXRvXM
じめ
0716デフォルトの名無しさん
垢版 |
2018/02/09(金) 20:51:00.52ID:KKlW8Jyu
くっだらねぇレスを何日も続けるんじゃねぇよゴミカスども
ほんとゴミみてぇな奴しかおらんな
0717デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:09:31.63ID:2uCfWfAn
過疎ってJavaの話題を誰も書かなかったからだよ。何かネタがあるなら君が書け。
例えプロでも初心者になり切って何か質問書いてみろ。お題でもいいぞ。
0719デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:38:03.63ID:9EA5viw/
こりゃダメだ
C#に転向するわ
0720デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:47:11.01ID:2u4zZUXa
>>719
言語としての将来性を考えるならそれがいいかもね
Javaを置き換える言語はあるがC#を置き換える言語はまだない
0722デフォルトの名無しさん
垢版 |
2018/02/09(金) 21:52:38.51ID:9EA5viw/
>>720>>721
ネットでちょこっと見たけど
C#って制御文とかクラスの使い方とかJavaとほぼ同じじゃね?
0724デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:04:37.91ID:KKlW8Jyu
C#推しの馬鹿って言語的な比較しかしないから馬鹿なんだよな
言語使うだけなら小学生でも出来る
Webサービスとして業務的な汎用性がJavaに比べてゴミだから流行らないんだよ
0725デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:05:20.81ID:9EA5viw/
>>723
今はC#7だから結構変わってるのか・・・
やっぱりJavaやろっかな・・・
0727デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:10:23.32ID:9EA5viw/
>>724
レンタルサーバーで気軽に使えないんだもん
0731デフォルトの名無しさん
垢版 |
2018/02/09(金) 22:12:18.12ID:9EA5viw/
>>724
奴隷さんでしたかw
0732デフォルトの名無しさん
垢版 |
2018/02/09(金) 23:08:49.74ID:nN2BoaGY
>>722
そりゃMSがJavaVM作ったらSunから文句言われて怒ったゲイツがパクってWindowsに都合よくなるように改造して作ったものがC#だから当然。
当時はそうやってWindowsに囲い込もうとしたが、しかし、長いこと独占状態だったから広まるのが遅く、ほとんどWindowsでしか使われない言語になってしまった。
今はAppleのSwiftが似たような状態になっていてフリーになったのに中々広まらない。最初に変な制限があると出遅れる。
0734デフォルトの名無しさん
垢版 |
2018/02/10(土) 00:05:53.34ID:dbzbK1DZ
>>733
今ではスマホアプリやゲームのクロスプラットフォーム開発は完全にC#に持っていかれたし、
LinuxのWeb開発もC#に侵食されつつあるよ
今やランタイムを同梱する場合などのライセンス問題でJavaが嫌われてC#を選ぶという、
昔とは完全に逆転した状況になってしまった
■ このスレッドは過去ログ倉庫に格納されています

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