LoginSignup
0
1

More than 1 year has passed since last update.

リスト編① 〜 参照渡し・addAllの理解 〜

Last updated at Posted at 2022-10-21

目次

 1.参照型とは
 2.参照渡しの理解
 3.addAllの理解

1. 参照型とは

 参照型の変数には「アドレス」が格納されている。
 その「アドレス」のメモリ上(一時的にデータを保管しておく場所)に、値が格納されている。
 このように「アドレス」を参照し、値にアクセスする型の総称を「参照型」という。
 オブジェクト(変数)の生成はnew演算子を使っておこなう。
 nullは参照先がない状態のこと。

2. 参照渡しの理解

package jp.co.study.sample;

import java.util.ArrayList;
import java.util.List;

public class Qiita {
	public static void main (String args[]) {

        // ①さかなリスト作成
        List<String> fishList = new ArrayList<String>();
        fishList.add("まぐろ");
        fishList.add("あじ");

        // ②リスト更新メソッド呼び出し
        updateList(fishList);
    }
    
    // ③リスト更新メソッド
    private static void updateList(List<String> fishList) {
		fishList.add("しゃけ");
		fishList.add("さんま");
		
		// ④出力
		System.out.println(fishList.toString());
	}
}

 ↑
①fishListの参照先の値には "まぐろ" と "あじ" が格納されている。
②fishListの参照を引数に、updateListメソッド呼び出し。
③fishListの参照先の値に "しゃけ" と "さんま" が追加される。
④さかなリストの出力結果は [まぐろ, あじ, しゃけ, さんま] となる。
※参照先の値を直接編集しているため、③でListをreturnする必要がない。

package jp.co.study.sample;

import java.util.ArrayList;
import java.util.List;

public class Qiita {
	public static void main (String args[]) {

        // ①さかなリスト作成
        List<String> fishList = new ArrayList<String>();
        fishList.add("まぐろ");
        fishList.add("あじ");

        // ②リスト更新メソッド呼び出し
        updateList(fishList);
    }
    
    // ③リスト更新メソッド
    private static void updateList(List<String> fishList) {
    	// ④鳥リスト作成
		List<String> birdList = new ArrayList<String>();
		birdList.add("すずめ");
		birdList.add("カラス");
		
        // ⑤引数で渡ってきたfishList = このメソッドで作成したbirdList
		fishList = birdList;
		
		// ⑥出力
		System.out.println(fishList.toString());
	}
}

 ↑
ひとつ前のソースと異なるのは④⑤。
⑤では、fishListのアドレス自体を、birdListのアドレスで上書きしているため、
さかなリストの出力結果は [すずめ, カラス] となる。

3. addAllの理解

package jp.co.study.sample;

import java.util.ArrayList;
import java.util.List;

public class Qiita {
	public static void main (String args[]) {

        // ①さかなリスト作成
        List<String> fishList = new ArrayList<String>();
        fishList.add("まぐろ");
        fishList.add("あじ");

        // ②リスト更新メソッド呼び出し
        updateList(fishList);
    }
    
    // ③リスト更新メソッド
    private static void updateList(List<String> fishList) {
    	// ④鳥リスト作成
		List<String> birdList = new ArrayList<String>();
		birdList.add("すずめ");
		birdList.add("カラス");

		// ⑤AddAll
		fishList.addAll(birdList);

		// ⑥出力
		System.out.println(fishList.toString());
	}
}

 ↑
ひとつ前のソースと異なるのは⑤。
AddAllの場合は、ふたつのリストがマージされるので、
さかなリストの出力結果は [まぐろ, あじ, すずめ, カラス] となる。

    // ③リスト更新メソッド
    private static void updateList(List<String> fishList) {
    	// ④鳥リスト作成
		List<String> birdList = new ArrayList<String>();
		birdList.add("すずめ");
		birdList.add("カラス");
        
        ///// 追加 /////
        fishList.clear();
		// ⑤AddAll
		fishList.addAll(birdList);

		// ⑥出力
		System.out.println(fishList.toString());
	}

 ↑
ひとつ前のソースの⑤AddAllの直前に、fishList.clear();をすると、
fishListの値が削除されるため、出力結果は [すずめ, カラス] となる。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1