☆★Java質問・相談スレッド175★★at TECH
☆★Java質問・相談スレッド175★★ - 暇つぶし2ch950:928
16/01/19 12:03:30.60 gb1JG2bL.net
>>941
俺も半笑いですw
久々に意識レベルを疑う池沼が来たな…とw
酒でも飲んでるか、脳にデッカイ腫瘍でもあるんじゃないですかねこの子

951:デフォルトの名無しさん
16/01/19 12:07:35.84 qBj82rYb.net
印象派のプログラマかな(適当)

952:デフォルトの名無しさん
16/01/19 12:21:35.18 wNgJdiNd.net
なぜかインターフェースの意味を説明し始めたぞこいつ…
>>942
「外部との接続のためのインターフェース」 だからこそ、そこには必要十分なメソッドだけが定義されてるんだよ
Java で言うなら、
List<Integer> list = new ArrayList<>();

List<Integer> list = new LinkedList<>();
に書き換えるのは容易でそこだけ書き換えれば良いけど
ArrayList<Integer> list = new ArrayList<>();

LinkedList<Integer> list = new LinkedList<>();
に書き換えると、この変数使ってるすべての箇所で修正が必要な可能性が生じる
インターフェースを使うことで、公開するメソッドの数に制限をかけることができて、修正の可能性を極小化出来る
何度も言うが、これは Java だけに限ったことじゃなく C# でも他のOOP言語でも同様

953:デフォルトの名無しさん
16/01/19 12:47:40.68 1PZtH04E.net
話逸れるけど、個人的にはJavaのListに関してははインタフェースじゃなくてArrayListなりLinkedListとして使いたいなぁ
周りがみんなインタフェース使ってるから倣ってるけど

954:デフォルトの名無しさん
16/01/19 13:30:07.42 qBj82rYb.net
>>946
いやそこはList使えよ
わざわざArrayListとかで型を宣言する意味がわからない

955:デフォルトの名無しさん
16/01/19 13:38:16.49 qBj82rYb.net
言葉足りなかった
enaureCapacityやtrimToSize とか使うならArrayListで宣言は必要と思うけど、普段使わないだろ

956:デフォルトの名無しさん
16/01/19 13:38:56.83 OfRjP77Z.net
デザインパターンとともに学ぶオブジェクト指向のこころの第一章だけでも読んでほしいところ

957:デフォルトの名無しさん
16/01/19 13:45:36.84 8TTjRiqP.net
いや別に使ってもいいでしょ。
このメソッドの引数にはスレッドセーフなリストを渡せってような時は意図的にシグネチャに具象型定義して使用者に分からせるようにしたりとか、まああまり親切では無いけど。

958:デフォルトの名無しさん
16/01/19 13:55:08.82 qBj82rYb.net
逆に意図した意味がなかったらそこで型を限定する必要性がないでしょ
むしろしちゃダメでしょ

959:945
16/01/19 16:01:27.27 xj7vEpfK.net
コレクション以外は素直にインタフェース使えるんだが
List#addのUnsupportedOperationに怯えるのが嫌なんよ
大抵の場合そんなプログラムの作りになってるのが悪いんだけど
引数にList受けてそのままaddして返してるようなの見ると怖くなっちゃう

960:デフォルトの名無しさん
16/01/19 17:54:30.97 9Rb1UiHl.net
ArrayListとLinkedListが両方ListなのはJavaの大きな設計ミスの一つだな
というか共通に実装するにはListが多機能すぎるんだよ
パフォーマンス的にも地雷になりうるから、2つは明確に区別するか、もしくはListではなくCollectionを使った方がいい

961:デフォルトの名無しさん
16/01/19 18:01:50.35 9Rb1UiHl.net
あと>>945みたいなことを言いながら単に複数の値を受け渡ししたいだけのときにListを使う奴の多いこと
大抵のケースではIterableで十分だ

962:デフォルトの名無しさん
16/01/19 19:09:02.88 wNgJdiNd.net
List のどこが多機能すぎるんだ?
順序付けられた Collection って明確な実装目的があるし、メソッド自体も Collection のそれと大して変わりないだろ
他の言語でも大体同じような感じの実装になってると思うが、Java の List が失敗なら例えばどんな言語のどんな実装なら理想なの?

963:デフォルトの名無しさん
16/01/19 19:27:56.09 9Rb1UiHl.net
>>955
インデックスを指定するメソッド全てだな
「順序がある」と「ランダムアクセスできる」は理論的には同じでも実用的には全く異なるのに、
それを同一としてしまったことがミスだ
後発の.NETの場合はIListはランダムアクセスのためのインターフェースとして定義され、LinkedListはIListを実装していない
あくまで「順序がある」としての共通化に拘るのなら、Listはランダムアクセス無しにして
ランダムアクセスするためのインターフェースを別途作るべきだった

964:デフォルトの名無しさん
16/01/19 20:14:44.81 wNgJdiNd.net
「順序がある」と「ランダムアクセスできる」は別に同一にしてないと思うけどなJavaでも
List が意味するのはあくまで「順序がある」で 、これ使って確かにインデックスアクセスもできるが、
それはランダムアクセス可能なことを意味したものじゃない(C# でも、LinkedList#ElmentAt は使える)
ランダムアクセス可能かどうかは、RandomAccess っていうマーカーインターフェースが別にある

965:デフォルトの名無しさん
16/01/19 20:31:57.67 WA9VNBRk.net
リンクリストに対してget(int)するのは不利だろうけど
add(int,Object)やremove(int)はすればするほどアレイリストより有利だよね?
リンクリストにランダムアクセスできることの何が問題なの?

966:デフォルトの名無しさん
16/01/19 20:38:18.24 i1u/RpO5.net
>>958
いやリンクリストはaddやremoveも毎回線形走査が走るからArrayListより遥かに遅いよ
ListIterator使わないとパフォーマンス上の利点はない
使ってもArrayListより早くなるケースは稀だけどね

967:デフォルトの名無しさん
16/01/19 20:55:01.60 i1u/RpO5.net
基本的にはほとんどすべてのケースでArrayListの方が速いと考えていい
リンクリストは極めて特殊な状況で使うものなので、
.NETではリンクリストなんか無視してArrayList構造前提のインターフェースにした方が便利だという判断になったんだろうね

968:デフォルトの名無しさん
16/01/19 20:56:09.33 UvexcXui.net
どうしたらエラー消えるか教えてくださいm(_ _)m
import java.awt.*; import java.awt.event.*; import java.util.*;
public class Kadai74 extends Frame implements ActionListener{
TextField t1 = new TextField(25); //25は最大表示可能文字数
public static void main(String[] args){
new Kadai74();
}
public Kadai74(){
this.setTitle("時刻表示");
this.setSize(320,120);
this.setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
setLayout(new FlowLayout());
Button button = new Button("時刻の表示");
button.addActionListener(this);
add(button);
button.setSize(1,3);
add(t1);
}
public void actionPerformed(ActionEvent e){
Date date1 = new Date();
TextField.setText(date1.toString());
}
}
エラー文↓
package74/Kadai74.java:59: static でない メソッド setText(java.lang.String) を static コンテキストから参照することはできません。
TextField.setText(date1.toString());

969:デフォルトの名無しさん
16/01/19 20:59:38.12 wNgJdiNd.net
>>961
誤) TextField.setText(date1.toString());
正) t1.setText(date1.toString());

970:デフォルトの名無しさん
16/01/19 21:03:09.49 UEki8ydx.net
どうすると959みたいな嘘つき&馬鹿が生まれるのか不思議でしょうがない

971:デフォルトの名無しさん
16/01/19 21:08:01.56 UvexcXui.net
>>962
ありがとうございます!!エラーがなくなりました!
あと表示させたいのがクリックした時の時刻なんですがアドレス値が表示されてしまいます…
どうすればよいでしょうか?
実行結果↓
package74.Date@7e6536b7

972:デフォルトの名無しさん
16/01/19 21:09:53.72 wNgJdiNd.net
いや>>960は正しいと思うけど俺は
LinkedList はメモリフットプリントが若干大きくなるぶん
理論上の計算量が同じでも ArrayList より遅くなることが多い
そして、LinkedList の ArrayList に対する利点は、イテレータ使って add, remove する時だけ
URLリンク(stackoverflow.com)
ここでも議論されてるが、LinkedList を使うのはかなり限られた特殊な状況ってので大体見解が一致してる
中には LinkedList は糞だから全部 ArrayList で良いって言ってる人もいる

973:デフォルトの名無しさん
16/01/19 21:15:53.20 wNgJdiNd.net
>>964
いや、お前のコードコピペして、>>962 でレスしたとこ変えただけで普通に時刻表示されたけど
後、表示されてるのはアドレス値じゃなくてインスタンスのハッシュ値だろ多分
package74.Date って自分で Date クラス作ったのか?

974:デフォルトの名無しさん
16/01/19 21:31:17.06 i1u/RpO5.net
>>965
メモリ使用量もそうだけどシーケンシャルアクセスでメモリアクセスが連続しないのがデカい
次の要素読むたびにキャッシュミスするクソみたいなデータ構造だ
ArrayListが苦手とされる途中への挿入削除は配列のブロックコピー一発という低レベルな操作だから極めて最適化されてて遅くなりにくい

975:957
16/01/19 22:06:20.77 zjEKWV3a.net
>>959
> いやリンクリストはaddやremoveも毎回線形走査が走るからArrayListより遥かに遅いよ
そこはリンクですからね!
毎回線形捜査するけどアレですよ!
中身の再配置が無いから早いはず!
URLリンク(ideone.com)
ちょっと計って比べてみた結果
…目が醒めました、はい
>>967
なるほどなるほど

976:デフォルトの名無しさん
16/01/19 22:08:58.95 SukeRrsX.net
>>945
C#も含め型推論のある言語だとその書き方はしないな
まあ、ArrayListからLinkedListに変えたいってことが稀だからだろう…

977:デフォルトの名無しさん
16/01/19 22:22:58.61 wNgJdiNd.net
>>969
IList と List の話じゃなく、
具象クラスの宣言時に型をインターフェースにするのはC#でもやるだろ普通に

978:デフォルトの名無しさん
16/01/19 22:34:17.01 Xsa7QJ4A.net
イテレータ使わないならLinkedList使わないでいいよ

979:デフォルトの名無しさん
16/01/19 22:39:05.90 SukeRrsX.net
>>970
この書き方の話だよ
List<Integer> list = new ArrayList<>();
ローカル変数の宣言は全部varかval

980:デフォルトの名無しさん
16/01/19 22:56:19.26 wNgJdiNd.net
> ローカル変数の宣言は全部varかval
Java でもそうだけど、こういう書き方するのってローカル変数よりむしろフィールドだと思うが
ローカル変数ならぶっちゃけなんでもいい

981:デフォルトの名無しさん
16/01/20 00:00:23.82 +oDO5kZy.net
× リンクリスト
○ リンクドリスト
ちゃんと覚えておけよ

982:デフォルトの名無しさん
16/01/20 00:03:38.55 uG3ghRzi.net
× リンクドリスト
○ リンクトリスト
ちゃんと覚えておけよ

983:デフォルトの名無しさん
16/01/20 00:14:22.73 0SkMRgg2.net
お前の俺命名ルールを押しつけられても

984:デフォルトの名無しさん
16/01/20 00:14:55.92 UTsS/Gix.net
卑猥な単語に見えたのは俺だけで良い

985:デフォルトの名無しさん
16/01/20 00:21:22.54 /jAqE9aQ.net
>>973
冗長だから普通は型推論使うよね。今回の話からはずれちゃうけど。

986:デフォルトの名無しさん
16/01/20 08:23:33.22 3QI3P0j9.net
ID:vsW11Ok5がvarがないのが不便だねっていいたかっただけなら
プログラムやる前にもうちょっと日本語の勉強した方がいい。

987:デフォルトの名無しさん
16/01/20 08:32:00.99 0GsBasXl.net
結局何の事なんか分からんかったな
モヤモヤする

988:デフォルトの名無しさん
16/01/20 08:35:15.19 /koko6uv.net
OOPの基礎知識の欠落と思われ
インタフェースに対してプログラミングするという視点の不在と
変数を十分に小さいインタフェースで取り回すことの快適感の不在

989:デフォルトの名無しさん
16/01/20 08:36:06.97 ztCI1EFa.net
変な理解にもとづいて書いてあるものは、忘れたほうがいい

990:デフォルトの名無しさん
16/01/20 11:08:18.35 tmIP8TZA.net
あとC#が~C#が~って押し付けする奴はもうC#だけやってろよ
他言語ではこうであるだからこっちでもこうするべきだなんて俺ルールと大差ないわ
郷に入れば郷に従っとけよ、ハゲ

991:デフォルトの名無しさん
16/01/20 16:25:40.16 pKAGFZbJ.net
>>923はそもそもキャストという用語を独自解釈してるからな
型変換とごっちゃになって覚えているか区別がついてないんだろうな
URLリンク(msdn.microsoft.com)
> 暗黙の型変換 : 変換はタイプ セーフであり、データが失われることはないため、
> 特別な構文は不要です。たとえば、小さい整数型から大きい整数型に変換したり、
> 派生クラスから基本クラスに変換したりする場合です。
>
> 明示的な型変換 (キャスト) : 明示的な型変換にはキャスト演算子が必要です。
> キャストが必要になるのは、変換時に情報が失われる可能性があるとき、
> または他の理由により変換が成功しないときです。
> 典型的な例としては、精度の低い型または範囲の狭い型への数値変換や、
> 基本クラス インスタンスの派生クラスへの変換があります。

992:デフォルトの名無しさん
16/01/20 18:24:51.17 6ONE7iN3.net
一応暗黙的なキャストっていう用語も存在してないことはない
URLリンク(msdn.microsoft.com)
普通はキャストって言われたら明示的な型変換だと思うけどな

993:デフォルトの名無しさん
16/01/20 18:42:00.22 IhxMke/s.net
キャスコといえばゴルフ

994:デフォルトの名無しさん
16/01/20 19:17:57.30 6Nwq+BmN.net
アップキャストとかダウンキャストとかあるじゃん。
それとはまた別なの?
アップキャストが暗黙と同義だよね。

995:デフォルトの名無しさん
16/01/20 19:59:09.19 QPtcDW16.net
URLリンク(en.wikipedia.org)
> In the C family of languages and ALGOL 68, the word cast typically refers
> to an explicit type conversion (as opposed to an implicit conversion),
Cの流れだと一般的にはこうだな
まぁそれ知らない人にはどうしようもないのかもしれんが

996:デフォルトの名無しさん
16/01/20 21:36:39.80 Ci1f4cma.net
アップキャストはオブジェクト指向の話で出てくる用語
オブジェクト指向をサポートする主要な言語(Java/C#/C++)の用語ではキャストと言ったら明示的変換
言語の文法の話なら間違いだが、そのコードで表現しようとしているものをオブジェクト指向として捉えた時の話であれば間違いではない

997:デフォルトの名無しさん
16/01/20 22:34:30.52 odor4UVz.net
コンパネのJava開くとネットワーク設定があってプロキシ設定出来るけど、これって何で使われるの?
ググッたら、Javaアプレットでネットワーク接続するときに使うみたいなんだけど、
これってJavaアプレットに限った話ってことで合ってる?
Javaアプリケーションでネットワーク接続する場合は、Windowsのインターネットオプションで設定したプロキシが利用されるってことで良いのかな?

998:デフォルトの名無しさん
16/01/21 00:36:19.67 wCHOY8+w.net
int と Integerって何が違うんですか

999:デフォルトの名無しさん
16/01/21 00:38:37.02 ZWK/hjZG.net
>>979
全然違うと思うwww
つかレスしてるやつらでも理解してないのが多いな
がっかりだよ

1000:デフォルトの名無しさん
16/01/21 00:46:09.83 88LciSZZ.net
>>992
C#スレ見たか?

1001:デフォルトの名無しさん
16/01/21 00:48:28.88 HtrKLPks.net
Integerは(不変の)オブジェクト

1002:デフォルトの名無しさん
16/01/21 00:48:53.58 ZWK/hjZG.net
>>993
関係ない
そもそもなんでインターフェイスすんの?って質問が本質
この書き方でも馬鹿が使えば実行時エラーの元なんだけどな

1003:デフォルトの名無しさん
16/01/21 00:49:45.44 ZWK/hjZG.net
'に' が抜けてた

1004:デフォルトの名無しさん
16/01/21 00:50:42.77 88LciSZZ.net
>>995
質問に対する返答になってない。やり直し。

1005:デフォルトの名無しさん
16/01/21 00:51:15.47 HtrKLPks.net
次スレ立てますね

1006:デフォルトの名無しさん
16/01/21 00:52:25.30 HtrKLPks.net
次スレ
★★Java質問・相談スレッド176★★ [無断転載禁止]©2ch.net
スレリンク(tech板)

1007:デフォルトの名無しさん
16/01/21 00:53:04.25 ZWK/hjZG.net
>>999


1008:デフォルトの名無しさん
16/01/21 02:11:23.15 Ro+JnAfr.net
1000

1009:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

1010:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch