筆記試験のjavaまとめ

4346 ワード

1.あなたが知っている集合を話し、違いを話します.
集合の違いの詳細な解釈はこれを参考にすることができる.
HashSetArrayListHashMapはスレッドが安全ではありません.複数のスレッドがアクセスし、1つ以上のスレッドが変更しようとしている場合、エラーが発生する可能性があります.Collectionsは、同期セットを作成するための複数の静的メソッドを提供します.次のプログラムでは、4つの同期のセットオブジェクトを作成します.
1)Listインタフェース(Collectionを継承):要素が整然としており、繰り返し可能(複数null要素オブジェクトを許可)
実装クラス:
ArrayList  規模が可変でチェーンテーブルのようにアクセスできる配列を実現します.Vectorクラスに似ているが同期していない機能を提供し、Array方式で実現されたリストであり、迅速なランダムアクセスを可能にする.このインプリメンテーションは同期されていないことに注意してください.複数のスレッドが同時にArrayListインスタンスにアクセスし、少なくとも1つのスレッドが構造的にリストを変更した場合、外部同期を維持する必要があります.(構造上の変更とは、1つ以上の要素を追加または削除する操作、または最下位の配列のサイズを明示的に調整することです.要素の値を設定するだけでは構造上の変更ではありません.)これは、一般的に、リストを自然にカプセル化したオブジェクトを同期することによって行われます.このようなオブジェクトが存在しない場合は、Collections.synchronizedListメソッドを使用してリストを「パッケージ」する必要があります.これは、リストへの予期せぬ同期アクセスを防ぐために、作成時に完了することが望ましい.
        List list = Collections.synchronizedList(new ArrayList(...)); 

 
 
LinkedListはチェーンテーブルを実現し、要素の挿入と削除に最適な順序アクセスを提供します.このクラスで定義されたチェーンテーブルは、スタックやキューのように使用することもできます.エレメントの挿入と削除に適した最適な順序アクセスを提供します. 
2)Setインタフェース(Collectionを継承);エレメントの無秩序(コレクション内のエレメントの位置が不確定で、遍歴するたびに結果が異なる場合があります)、繰り返し不可(nullエレメントオブジェクトが最大1つ)
実装クラス:
HashSetは、ハッシュ・テーブル(実際にはHashMapインスタンス)によってサポートされる要素の位置をすばやく特定できます.HashSetに格納されたオブジェクトは、HashCode()メソッドを実装する必要があります.
このインプリメンテーションは同期されていないことに注意してください.複数のスレッドが同時に1つのハッシュsetにアクセスし、少なくとも1つのスレッドがsetを変更した場合、外部同期を維持する必要があります.これは、通常、setを自然にカプセル化したオブジェクトに対して同期操作を行うことによって行われる.このようなオブジェクトが存在しない場合は、Collections.synchronizedSetメソッドを使用してsetを「パッケージ」する必要があります.setへの予期しない非同期アクセスを防止するために、作成時にこの操作を完了することが望ましい.
3)Mapインタフェース:Key値は重複できない
実装クラス:
HashMap キーから値マッピングのハッシュテーブルを実現し、キーによって値オブジェクトを取得し、順序がなく、get(key)によってvalueを取得し、空のオブジェクトを格納することを許可し、キーが空であることを許可する(キーは一意でなければならないため、もちろん1つしかない). 
このインプリメンテーションは同期されていないことに注意してください.複数のスレッドが同時に1つのハッシュマッピングにアクセスし、少なくとも1つのスレッドが構造的にマッピングを変更した場合、外部同期を維持する必要があります.(構造上の変更とは、1つ以上のマッピング関係を追加または削除する操作です.インスタンスにすでに含まれているキーに関連付けられている値のみを変更するのは、構造上の変更ではありません.)これは、マッピングを自然にカプセル化したオブジェクトを同期することによって一般的に行われます.このようなオブジェクトが存在しない場合、Collections.synchronizedMapメソッドを使用してマッピングを「パッケージ」する必要があります.以下に示すように、マッピングへの予期しない非同期アクセスを防止するために、作成時にこの操作を完了することが望ましい.
   Map m = Collections.synchronizedMap(new HashMap(...));

似たような面接問題をいくつか添付します.
CollectionとCollectionsの違い.Collectionsはjava.utilの下のクラスで、コレクション操作に関する静的メソッドが含まれています.Collectionはjava.utilの下のインタフェースで、様々な集合構造の親インタフェースです.List,Set,MapはCollectionインタフェースから継承されますか?List,SetはMapでArrayListとVectorの違いではありません.一.同期性:Vectorはスレッドが安全で、つまり同期であるが、ArrayListはラインプログラムが安全ではなく、同期の二ではない.データの増加:増加が必要な場合、Vectorはデフォルトで元のベールに増加するが、ArrayListは元の半分のHashMapとHashtableの違いである.歴史原因:Hashtableは古いDictionary類に基づいている.HashMapはJava 1.2が導入したMapインタフェースの1つの実現2.同期性:Hashtableはスレッドが安全で、つまり同期であるが、HashMapはラインプログラムが安全ではなく、同期の3.値ではない.値:HashMapだけが空の値をテーブルのエントリのkeyまたはvalueとすることができる
2.スレッド同期の問題の解決方法
3.リロードとリビルドの違い
 
書き換え方法のルール:
1、パラメータリストは書き換えられた方法と完全に同じでなければならない.そうしないと、書き換えではなくリロードと呼ぶことはできない.
2、返されるタイプは、書き換えられたメソッドの返されるタイプと常に同じでなければならない.そうしないと、書き換えとは呼ばれずにリロードされる.
3、アクセス修飾子の制限は必ず書き換え方法のアクセス修飾子より大きい(public>protected>default>private)
4、書き換え方法は必ず新しい検査異常を投げ出すことができないか、あるいは書き換え方法によって明らかにされたよりも広い検査型異常を投げ出すことができない.例:
親クラスの1つのメソッドは、チェック異常IOExceptionを明らかにし、このメソッドを書き換えるとExceptionを投げ出すことができず、IOExceptionのサブクラス異常を投げ出すしかなく、非チェック異常を投げ出すことができる.
JAVAでメソッドの書き換えは,子が親を継承する方式で発生する.子クラスが親クラスのメソッドを継承するときに親クラスのメソッドに対して一定の修正を行うと,メソッドの書き換えが用いられる.サブクラスでメソッドの書き換えを行う場合、サブクラスで書き換えたメソッドのアクセス修飾子、戻りタイプ、メソッド名、およびパラメータリストは親クラスと同じでなければなりません.そうしないと、コンパイルがエラーになります.サブクラスで書き換えたメソッドの戻りタイプが親の戻りタイプ(戻り値)のサブクラスである場合を除き、メソッドの書き換え(ただしこのメソッドはJAVA 5以降)を行うこともできます.たとえば、サブクラスの戻りタイプがStringであり、親がObjectである場合もあります.子クラスの戻りタイプが親クラスの戻りタイプの親または戻りタイプが基本データ型の場合、コンパイルはエラーを報告します.この場合、親メソッドを使用する場合は、superキーで呼び出すことができます.
再ロードされるルール:
1、異なるパラメータリストを持つこと.
2、叱らずに返すタイプがあってもいいです.パラメータリストが違うだけでいいです.
3、異なるアクセス修飾子を持つことができる.
4、異なる異常を投げ出すことができる.
4.intとIntergerの違い
5.StringBuilderとStringBufferの違い
6.errorとExceptionの違い
7.多態の二つの表現形式
オブジェクトのマルチステート:継承はマルチステート実装の基礎
参照マルチステート:親クラスの参照は、このクラスのオブジェクトを指すことができます.
親クラスの参照は、子クラスのオブジェクトを指すことができます.
例:Animal obj 1=new Animal();
Animal obj2=new Dog();
メソッドマルチステート:
このクラスのオブジェクトを作成するときに呼び出されるメソッドは、このクラスのメソッドです.
サブクラスオブジェクトを作成するときに呼び出されるメソッドは、サブクラス書き換えメソッドまたはサブクラス継承メソッドです.