2017-09-20 7 views
-1

私は非常に簡単な質問をしたいと思います。この2 sceneriosでそうさまざまな風景でのリストの実装

1.

List<SalesReturnJson> salesReturnJsons=new LinkedList<>(); 
salesReturnJsons=salesRepository.findSales(); 

2.

List<SalesReturnJson> salesReturnJsons=salesRepository.findSales(); 

どのように割り当てられたメモリであり、どの実装第二のscenerioでは:あなたは、変数を初期化したことにより、2通りの方法があります(LinkedListまたはArrayList)は、Listと呼ばれます。

ご協力いただければ幸いです。

+0

'findSales()'メソッドから返されるのは何ですか? 'ArrayList'インスタンスか' LinkedList'ですか? –

+0

最初のシナリオでは、理由なしで 'LinkedList'を作成しています。それからあなたはそれを投げ捨てる。 – Kayaman

答えて

1

最初のシナリオで2番目の行が最初の行の真下にある場合、「新しい」文は効果がありません。空のLinkedListを作成し、その上に参照を置いてから別のListを参照するように参照を変更します(findSalesがListを返すと仮定します)。最後に、Javaのガベージコレクタは空のLinkedListを消去しますもう

2番目のシナリオでは、リストを返して(このように)、このリストへの参照を入れます。

0

どちらの場合でも、salesRepository.findSales()が返すオブジェクトが変数に割り当てられます。実装はどちらの場合も同じであるため、実際の実装を知らないと、オブジェクトは両方のケースで同じクラスになるとしか言えませんが、オブジェクトを作成してから、変数を別の参照に再割り当てします最初の例はほとんど意味がありません。 2つ目は同じ結果を達成しますが、労力は減ります。

0

どちらのシナリオも、salesRepository.findSales()によって返されたリストタイプのsalesReturnJsons変数にまったく同じリストで終わります。与えられたコードから、このメソッドから実際に返される型はわかりません。

唯一の違いは、まったく不要な空のLinkedListが作成され、salesReturnJsons変数に格納され、即座にsalesRepository.findSales()のリストに置き換えられ、LinkedListガーベッジが作成されるという点です。ですので、2番目のバージョンを使用してください。あなたの目的はsalesRepository.findSales()結果のLinkedListのを持っている可能性がある場合(特別な理由を問わず)

は、その後、あなたができる:新鮮なLinkedListのに方法の結果から要素をコピーします

List<SalesReturnJson> salesReturnJsons= 
    new LinkedList<SalesReturnJson>(salesRepository.findSales()); 

、あなたはリストのタイプについて確信しています。

普通のコードスニペットはあなたのバージョン2です。

関連する問題