ブルヌス・゚ッケルによるロシア語の本 『Javaの哲孊Javaの哲孊』の質問ず挔習



「Javaの孊習を開始するための本」ずいう質問によく答えられたす。Javaで考えるブルヌス゚ッケル。
しかし問題は、この本第4版には各章の最埌に質問ず実践的な䜜業が含たれおいないこずです...

たさに最も効果的な蚀語孊習に貢献するものです

この本で勉匷しおいる間、私は自分にずっお新しいたたは興味深い瞬間に぀いお小さなメモを䜜成したした。 そしお、それらを短い質問の圢で蚭蚈したした。 各章を読んだ埌、私はこのリストを調べお、章で䞎えられたコヌドに䌌たタスクを思い぀いた。

これらの質問ノヌトを共有しおみたせんか

珟圚コンパむルされおいる質問のリストが提䟛されたす。
「内郚クラスずは」などの質問がありたせん。 私の意芋では、そのような定矩は章を読むずきに明確に圢成され、補匷のために退屈で平凡な質問を必芁ずしたせん。

「スタックずは」などの質問もありたせん。 圌の䜜品の特城は䜕ですか」 これらは、倚くの蚀語およびプログラミング党䜓の基本です。 したがっお、私はそれらを避けようずしたした。

䞀般的に、定期的な繰り返しを必芁ずするさたざたな興味深い埮劙さずニュアンスに関する質問を定匏化しようずしたした。

アンケヌトの最埌には、私が行ったいく぀かの挔習課題の翻蚳があり、本の英語のオリゞナルで出版されおいたす。 これらの挔習が印刷されおいるペヌゞが瀺されおいたす。

ロシア語版のペヌゞ番号が質問ぞの回答のほずんどに远加されおいるこずに、あなたはうれしい驚きを芚えるでしょう。 これらのペヌゞには、提起された質問に察する回答も含たれおいたす。


第10章内郚クラス
質問
1.内郚クラスは、倖郚クラスのどのフィヌルドずメ゜ッドにアクセスできたすか クラスが静的ず宣蚀された堎合、答えはどのように倉わりたすか
2.内郚クラスのオブゞェクトを䜜成するコヌドを蚘述したす。 内郚クラスが静的ずしお宣蚀されおいる堎合、このコヌドはどのように倉わりたすか
3.内郚クラスのメ゜ッドから倖郚クラスのメ゜ッドを呌び出すコヌドを提䟛したす。
4.むンタヌフェヌスの実装に関する内郚クラスの制限は䜕ですか
5.内郚クラスは倖郚ず同じむンタヌフェヌスを実装する必芁がありたすか
6.匿名クラスを䜿甚しおファクトリヌ実装コヌドを蚘述したす。

第11章オブゞェクトコレクション
ご質問
1. Collectionむンタヌフェヌスずは䜕ですか
答え
Collectionむンタヌフェむスは、すべおのシヌケンシャルコンテナの䞀般的な機胜p。301を蚘述するルヌトむンタヌフェむスです。

2.コンテナを䜿甚しおプリミティブを保存できたすか
答え
プリミティブはコンテナの芁玠ずしお機胜できたせん。 オブゞェクトぞの参照のみがコンテナに配眮できたす。 ただし、オヌトボクシングメカニズムは、プリミティブをオブゞェクトタむプに自動的に倉換したす。 したがっお、プログラマは前述の制限を「忘れる」こずができたす。
 MrDずずもに提䟛される回答 


3.アむテムをArrayListコンテナに远加するための奜たしい方法は䜕ですか
Arrays.asListたたはCollections.addAllおよびその理由
答え
Collections.addAllは、パフォヌマンスp。282が高いため、掚奚されたす。

4. ArrayListを操䜜するずきに䜿甚できるいく぀かのメ゜ッドをリストしたす。
答え
「含むオブゞェクトo」-配列内の芁玠の存圚を確認したす。
"IndexOfObject o"-芁玠のむンデックスを取埗したす。
「SubListindex1、index2」-芁玠の䞀郚を新しいコンテナにコピヌしたす。
「ContainsAllObject [] o」-コンテナ内の芁玠の存圚を確認したす。

5. Queue型のコンテナに察しおremoveメ゜ッドは䜕を返したすか
答え
Queue.removeメ゜ッドは、キュヌの先頭芁玠を削陀するだけでなく、その文字列倀も返したす。

6. LinkedListを䜿甚する堎合、ArrayListず比范しお高速な操䜜は䜕ですか
答え
LinkedListを䜿甚するず、リストの䞭倮からの芁玠の挿入ず削陀が高速になりたすp。291。

7. LinkedListを䜿甚しおどのような皮類のコンテナを実装できたすか
答え
スタック、キュヌ、双方向キュヌ。

8. Setコンテナファミリは、Listコンテナファミリずどのように異なりたすか 線集しおくれたMrDに感謝
答え
Setコンテナファミリでは、デヌタは1぀のむンスタンスにのみ保存できたすp。294

9. Setに既に含たれおいる芁玠をSetに远加しようずするず、䟋倖が発生したすか
答え
䟋倖は発生したせん。

10. PriorityQueueコンテナはキュヌずどう違うのですか
答え
PriorityQueueの芁玠は、特定の芏則に埓っお䞊べ替えるこずができたす。

11. PriorityQueueに申し蟌む堎合、Comparatorは䜕に䜿甚されたすか
答え
コンパレヌタを䜿甚するず、PriorityQueue芁玠の䞊べ替え芏則を指定できたす。

12.コンテナタむプセットTreeSet、HashSet、LinkedHashSetの堎合、接頭蟞「Tree」および「Hash」、「LinkedHash」はどういう意味ですか
答え
接頭蟞「ツリヌ」は、コンテナの芁玠が゜ヌトされた順序で保存されるこずを意味したす。
たずえば、アルファベット順たたは昇順接頭蟞「ハッシュ」は、コンテナがハッシュを実装しお遞択を高速化するこずを意味したす。 プレフィックス「LinkedHash」は、芁玠が挿入順にコンテナに保存されるこずを意味したすが、クむックアクセスp。309を提䟛したす

13. MapコンテナはIterableむンタヌフェむスをサポヌトしおいたすか
答え
タむプ "Map"のコンテナIterableむンタヌフェむスはサポヌトしおいたせんp。305Iterableむンタヌフェむスをサポヌトするクラスのリスト
docs.oracle.com/javase/1.5.0/docs/api/java/lang/Iterable.html

14. foreach構文はMapコンテナで機胜したすか
答え
Map型のコンテナの堎合、反埩可胜なむンタヌフェむスをサポヌトしおいないため、foreach構文は機胜したせん。

15.反埩子を䜿甚しおコンテナ芁玠にアクセスする䞻な利点は䜕ですか
答え
むテレヌタは、さたざたなタむプのコンテナに䜿甚できたすp。290。

16.通垞のむテレヌタヌず比范しお、ListIteratorむテレヌタヌによっお提䟛される新しい機胜は䜕ですか
答え
ListIteratorは、コンテナの最初から最埌たでだけでなく、その逆も同様に芁玠ぞの順次アクセスを提䟛したすp。290。


挔習
11. 1. Fruitクラスを䜜成したす。 このクラスには、int weightフィヌルド、このフィヌルドを初期化するコンストラクタヌ、およびweight倀を出力するprintWeightメ゜ッドが含たれおいる必芁がありたす。
mainメ゜ッドで、いく぀かのFruitオブゞェクトをListコンテナに远加したす。 次の方法で、各オブゞェクトに察しおprintWeightを呌び出したす。
Agetメ゜ッドを䜿甚したす。
Bむテレヌタを䜿甚したす。

答え
// Fruit.java public class Fruit { private int weight = 0; public Fruit(int weight) { this.weight = weight; } public void printWeight() { System.out.println("Weight is: " + weight); } } // Apply.java import java.util.*; public class Apply { public static void main(String[] args) { List<Fruit> fruits = Arrays.asList(new Fruit(10), new Fruit(20)); // a System.out.println("Task a: "); for (Fruit f : fruits) { f.printWeight(); } // b System.out.println("Task b: "); Iterator<Fruit> it = fruits.iterator(); while(it.hasNext()) { it.next().printWeight(); } } } 



11.2。 11.1のFruitクラスをマップコンテナヌに配眮したす。 キヌずしお所有者の名前を、倀ずしおFruitタむプのオブゞェクトを瀺したす。 キヌで各Fruitオブゞェクトを列挙し、芋぀かったオブゞェクトに察しおprintWeightメ゜ッドを呌び出したす。 むテレヌタを䜿甚したす。

答え
コンパクトなむテレヌタ゜リュヌションのquarantinoに感謝したす。
フルヌツクラス-タスク11.2を参照

 import java.util.*; import java.util.Map.Entry; public class Apply { public static void main(String[] args) { //  HashMap,      Map<String, Fruit> fruit = new HashMap<String, Fruit>(); fruit.put("Bob", new Fruit(10)); fruit.put("Mary", new Fruit(20)); //    foreach System.out.println("With foreach"); for (String key : fruit.keySet()) { fruit.get(key).printWeight(); } //     System.out.println("With iterator"); Iterator<Entry<String, Fruit>> it = fruit.entrySet().iterator(); while (it.hasNext()) { it.next().getValue().printWeight(); } } } 




11.3。 Comparator for PriorityQueueを䜿甚しお、文字列倉数がサむズで゜ヌトされおいるこずを確認したす。

答え
泚この䟋はむンタヌネットから取埗したものです。
 // StringComparator.java import java.util.Comparator; public class StringComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { if (s1.length() < s2.length()) { return -1; } if(s1.length() > s2.length()) { return 1; } return 0; } } // PriorityQueue.java import java.util.Comparator; import java.util.PriorityQueue; public class PriorityQueueUse { public static void main(String[] args) { Comparator<String> comparator = new StringComparator(); PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator); queue.add("abcde"); queue.add("abc"); queue.add("abcdefghi"); queue.add("a"); //          String System.out.println("Before removing:"); System.out.println(queue); //          String System.out.println(); System.out.println("Look at removing order: "); while (queue.size() != 0) { System.out.println(queue.remove()); } } } 



オリゞナルの本の緎習問題の翻蚳
11.4。 int gerbilNumberフィヌルドを持぀新しいスナネズミクラスを䜜成したす。 フィヌルドがコンストラクタヌによっお初期化されるようにしたす。 たた、「ホッピングしおいるスナネズミの数」ずgerbilNumber倉数の倀を出力するhopメ゜ッドを䜜成したす。 ArrayListコンテナにGerbilオブゞェクトを配眮したす。 getメ゜ッドを実装しお、これらのオブゞェクトごずに呌び出されるhopメ゜ッドでリストを反埩凊理したす。

11.5。 SimpleCollection.javaを倉曎しお、c倉数にSetメ゜ッドを䜿甚したす。 innerclasses / Sequence.javaを倉曎しお、そこに任意の数の芁玠を远加できるようにしたす。

11.6。 お気に入りの映画のヒヌロヌの名前のリストString型のオブゞェクトを含むGeneratorクラスを䜜成したす。 nextメ゜ッドを䜿甚しお、このリストの各オブゞェクトを返したす。 䜜成されたリストの最埌に到達したら、リストの先頭に戻る必芁がありたす。
Generatorクラスを䜿甚しお、ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSetなどのコンテナにデヌタを入力したす。 各配列の内容を衚瀺する䞀般的なメ゜ッドを蚘述したす。

11.7。 ListFeatures.javaを倉曎しお、Pet型のオブゞェクトの代わりにInteger型のオブゞェクトを䜿甚するようにしたす。 この倉曎によるパフォヌマンスの違いを説明したす。

11.8。 ListFeatures.javaに぀いお挔習11.7を繰り返したすが、PetをStringsに眮き換えたす。

11.9。 別のクラスのオブゞェクトの初期化された配列を生成するクラスを䜜成したす。 この配列を䜿甚しお、タむプListのコンテナに入力したす。 リストにsubListを䜿甚しお別のコンテナを䜜成したす。 次に、subListを䜿甚しお抜出したアむテムを、抜出元のコンテナヌから削陀したす。

11.10。 さたざたなコンテナずそのメ゜ッドの䜿甚に関する遊び心のある緎習独立しお発明された
最初に「食料」、「薬」、「嚯楜」の3぀の芁玠で構成される費甚のリストがあるずしたす。 これらの芁玠をListコンテナに曞き蟌む必芁があり、それらの順序は倉わらないはずです。

次に䜕が起きたしたか
1ロヌンの支払いコストをリストに远加するのを忘れおいたこずに突然気付きたした。 レコヌドむンデックスを盎接䜿甚せずに、「食品」ず「薬」の間に「皎」レコヌドを配眮する必芁がありたす。
2劻は、「コヌト」、「レストラン」の゚ントリを含む远加の費甚リストを持ち蟌みたした。 䜕もする必芁はありたせんリストの最埌に費甚を远加したす自分を平らにしないため。
3しかし、矩理の母は私たちにもう少しポむントをもたらしたした「劇堎」、「家の装食」、「薬」。 たぶん、あなたはすでにこれらのポむントのいく぀かを持っおいるでしょう。 念のため、最初のコンテナの内容をSetタむプの新しいコンテナにコピヌし、ためらわずにこれらの流行をリストの最埌に远加したす。
4ためらうこずなく、費甚マップ<String、Integer>の連想動的リストを䜜成したした。
5すべおのコストを30増やすこずを決定したした。 これを行うメ゜ッドを䜜成したす。
6やめお 「家の装食」で十分です。そしお、おそらくコヌティングするのに時間がかかりすぎたす。 これらのアむテムを新しいリストに入力し、メ゜ッドに枡したす。このシヌトを読み蟌むず、マップコンテナヌで察応する経費アむテムが怜玢され、... 80削枛されたす。
7矩母の費甚の䞀郚を捚おたしょう。 さらに、圌女に驚きを䞎えたす 開始むンデックスず終了むンデックスを決定する2぀の乱数を生成し、それらの間のすべおの費甚は別のリストに蚘録されたすリストは埌でスリップされたす。 察応する支出項目を捚おお、マップを曎新するこずを忘れないでください。
8費甚の最小額を決定するメ゜ッドを蚘述し、これらの費甚の名前を印刷し、誇らしげにリストからこのアむテムを削陀したす。
9しかし、远加の消耗品が私たちを駆り立おたした。別の配列の圢で装食された「食べ物」ず「レストラン」です リストにこれらのアむテムがあるかどうかを確認したすか 少なくずも1぀の費甚がある堎合は、決しお远加したせん このいずれも存圚しない堎合䜕も実行できない、これらのポむントの䞡方を䞀床に远加したす私は空腹です。
10私たちは倢䞭です Map all Integerのリストから残りの費甚の合蚈を読み取り、それらを「ある」コンテナに曞き蟌み、昇順で䞊べ替え、激怒しおそれらを混ぜ、特別なむテレヌタを必死に䜿甚しお逆の順序でパスで削陀したす。






第17章䞊列実行
1.スレッドのstartメ゜ッドずrunメ゜ッドの違いを説明したす。
答え
startは、呌び出しがスレッドを開始するメ゜ッドです。 このメ゜ッドは定矩を必芁ずしたせん。
Runは、startが呌び出された埌に実行されるメ゜ッドです。 オヌバヌラむドが必芁であり、スレッドが起動された目的のためのタスクコヌドが含たれおいたす。

2.ガベヌゞコレクタヌは、倉数に栌玍されおいないリンクのストリヌムを削陀したすか
 New Thread(new ThreadTask()).start; 

答え
各スレッドはそれ自䜓で登録され、ガベヌゞコレクタヌはそれを削陀する暩利がありたせんp。560。

3.デヌモンスレッドず通垞のスレッドの違いは䜕ですか
答え
すべおのメむンスレッドが完了するず、デヌモンスレッドも䜜業を完了したす。 これらのフロヌがタスクを完了したかどうかは関係ありたせんp。568。

4.デヌモンスレッドに新しいスレッドを生成させたす。 このスレッドは通垞のスレッドですか、デヌモンスレッドですか
答え
このメ゜ッドはデヌモンスレッドp。571です。

5.ストリヌムに察しお呌び出されるjoinメ゜ッドの目的。
答え
スレッドのthread.joinメ゜ッドは、別の珟圚のスレッドから呌び出すこずができたす。 その結果、珟圚のスレッドは操䜜を䞀時停止したす。 thread.joinスレッドがタスクを完了するず、珟圚のスレッドが再開したすp。576

6.䞭断に関するアトミック操䜜ずは䜕ですか アトミックおよび非アトミック操䜜の䟋を瀺したす。
答え
アトミック操䜜は、原則ずしお、䞭断の可胜性なしに実行される単玔な操䜜です。 ぀たり、フィヌルドの䞭間状態を取埗する方法はありたせん。
アトミック操䜜の䟋割り圓お、戻り倀。
非アトミック操䜜の䟋増分、枛分p。579

7. synchronizedキヌワヌドを䜿甚する理由
答え
共有リ゜ヌスぞのアクセスに関連するスレッド間の競合を防ぐにはp。581

8.ミュヌテックスの定矩を指定したす。
答え
Mutexは、次のように実装されたデッドロックメカニズムです。 コヌドは、ロックセクションず呌ばれるセクションに配眮されたす。 このコヌドは、䞀床に1぀のスレッドのみを通過する必芁がありたす。 この通過䞭の別のスレッドは、ブロッキングセクションp。581にアクセスできたせん。

9.同期ずしお宣蚀されたメ゜ッドを䜿甚しお、共有リ゜ヌスぞのアクセスを蚭定する方法を教えおください。
答え
共有リ゜ヌスはオブゞェクト内に配眮できたす。 さらに、リ゜ヌスにアクセスするメ゜ッドはすべお同期枈みずしお宣蚀されたす。 そのようなメ゜ッドのいずれかの内郚のスレッドによっお特定のタスクを実行させたす。 同時に、他のすべおのスレッドは同期メ゜ッドに入るこずができたせん。 最初のスレッドがこれらのメ゜ッドp。582の凊理を終了しなかった堎合にのみ、これを行うこずができたす。

10. Lockオブゞェクトの目的は䜕ですか
答え
ロックオブゞェクトは、ミュヌテックスを明瀺的に管理するように蚭蚈されおいたす。 プログラムで明瀺的に䜜成されたこのようなオブゞェクトを䜿甚するず、ロックを蚭定たたは削陀できたすp。583。

11. lock呌び出しでtry-catchブロックを配眮する必芁がありたすか
答え
そのようなナニットを配眮する必芁がありたす。 さらに、finallyセクションを远加するこずをお勧めしたす。 このセクションでは、unlockを呌び出す必芁がありたす。 これにより、䟋倖が発生した堎合にロックが解陀されたす。

12.同期ずロックを䜿甚する堎合の制限は䜕ですか
答え
同期を䜿甚するず、倱敗した結果のロックを取埗できたせん。 䞀定期間ロックを取埗するこずもできたせん。その埌、障害が発生する可胜性がありたすp。584。


挔習
1.任意のクラスにRunnableむンタヌフェむスを実装したす。
オヌバヌラむドされたrunメ゜ッド内で、メッセヌゞを入力したす。 その埌、yieldを呌び出したす。 䞊蚘の2぀のステップを3回繰り返しおから、runメ゜ッドを完了したす。
コンストラクタヌの開始を瀺すメッセヌゞをコンストラクタヌの先頭に眮きたす。 たた、ストリヌムの完了を瀺すメッセヌゞを入れたす。 このようなタスクをいく぀か䜜成し、耇数のストリヌムを䜿甚しおそれらを解決したす元のp。826。
2.圢匏generics / Fibonacci.javaに埓っお、n個のフィボナッチ数列を生成するタスクを䜜成したす。 さらに、このタスクのコンストラクタヌにnを枡す必芁がありたす。 そのようなタスクをいく぀か䜜成し、耇数のストリヌムを䜿甚しおそれらを解決したす元の804ペヌゞ。
3.さたざたなタむプの゚グれキュヌタヌを䜿甚しお、挔習1ず2を繰り返したす元のp。804。
4. Callableがすべおのフィボナッチ数を芁玄するように、挔習2を修正したす。 そのようなタスクをいく぀か䜜成し、これらの問題を解決した結果を印刷したすオリゞナルの807ペヌゞ。



質問ず挔習は、コンパむルおよび翻蚳されるたびに定期的に远加されたす。 そのような远加はそれぞれ、蚘事の最埌に蚘述され「曎新」を展開、コメントに蚘述されたす。

章が順番に远加されるこずを保蚌できたせん。 たずえば、第11章のアンケヌトの埌に、17日のアンケヌトが衚瀺される堎合がありたす。

質問の準備ず本の章に関するワヌクショップにも参加しおください
参加を垌望される方は、「ダむアログ」に曞いおください。 10番たでの章に関する質問や挔習は公開しないこずをすぐにお知らせしたすこの資料は既に孊習枈みです。

圹立぀情報
英語のオリゞナルのJavaでの思考では、挔習はパラグラフの埌に䞎えられたすありがずう、 iflista 
英語版の 『Javaで考えるための泚釈付き゜リュヌションガむド』は、これらの挔習に察する゜リュヌションを提䟛しおいたすありがずう、 WraithOW 。

参照
OracleのJava孊習資料ずタスク英語
docs.oracle.com/javase/tutorial/java/index.html

曎新情報
曎新12014幎2月15日第11章の質問を再蚭蚈し、質問ぞの回答を远加したした。 第11章に3぀の挔習を远加ありがずう、以前の版からそれらの䞀郚を借りるずいうアむデアに感謝
曎新22014幎2月18日質問ず挔習の䞀郚が第17章に远加されたした。残りの郚分は埌で公開されたす。

Source: https://habr.com/ru/post/J212707/


All Articles