Java入門 基本情報技術者へのステップアップ – Map List StringBuilder –

基本情報技術者試験に必要となるコレクションクラス群(Map、List)や文字列操作(StringBuilder)について学びましょう。

コレクション(List)

Listのクラスは、大きさを決めていない配列と思ってください。

定義はインターフェイスのListを利用しますが、newする実態はArrayListクラスを使用することが多いです。

addメソッドで要素を加えて、getメソッドで取得します。

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

class ListTest{
  public static void main(String args[]){
    List<String> list = new ArrayList<String>();

    list.add("日本");
    list.add("ブラジル");
    list.add("イングランド");
    list.add("ポルトガル");
    list.add("フランス");

    String country = list.get(2);
    System.out.println(country);
  }
}

// -----
// 出力結果(System.out.println)
// イングランド

ArrayListクラスについては、JavaDocも見ておきましょう。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/ArrayList.html

コレクション(Map)

Mapクラスは、大きさの決まっていない連想配列(キーと値のセット)と思ってください。

定義はインターフェイスのMapを利用しますが、newする実態はHashMapクラスを使用することが多いです。

putメソッドで要素を加えて、getメソッドで要素を取得します。特定のキーがあるかどうかを調べるためには、containsKeyメソッドを使用します。

import java.util.HashMap;
import java.util.Map;

class MapTest{
  public static void main(String args[]){
    Map<String,String> map = new HashMap<String,String>();

    map.put("apple", "りんご");
    map.put("orange", "みかん");
    map.put("banana", "ばなな");

    if (map.containsKey("apple")){
      System.out.println(map.get("apple"));
    }else{
      System.out.println("指定したキーは存在しません");
    }
  }
}

// -----
// 出力結果(System.out.println)
// りんご

HashMapクラスについては、JavaDocも見ておきましょう。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/HashMap.html

文字列結合(StringBuilder)

Javaで文字列を結合を簡単に行うには、下記のように行います。


class StringTest1{
  public static void main(String args[]){
    String str = "abc" + "def" + "ghi";
    System.out.println(str);
  }
}

// -----
// 出力結果(System.out.println)
// abcdefghi

簡単なプログラムであれば問題はないのですが、この方法は実行速度とメモリの使用量を考えると問題があると言われています。

多くの場合、文字列結合では専用のクラス(StringBuilder)が準備されていますので、こちらを使うことが通例となっています。

appendメソッドで文字列を追加して、Stringオブジェクトを生成します。


class StringTest2{
  public static void main(String args[]){
    StringBuilder sb = new StringBuilder();
    sb.append("abc");
    sb.append("def");
    sb.append("ghi");
    System.out.println(new String(sb));
    //StringBuilderを文字列にするには次の方法もあります。
    //System.out.println(sb.toString());
  }
}

// -----
// 出力結果(System.out.println)
// abcdefghi

StringBuilderクラスについては、JavaDocも見ておきましょう。

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/StringBuilder.html

ラッパークラス

Javaでは基本のデータ型があり、数値や文字を格納したり演算子と組み合わせることで様々なことができます。しかし、ただ基本データ型はクラスのようにメソッドがありませんので、型変換などメソッドが準備されていません。

そこで基本データ型の値を持つことができ、様々なメソッドを持ったクラスが用意されています。これをラッパークラスと呼びます。

ListクラスやMapクラスで数値などを扱う場合、このラッパークラスを使用します。

基本データ型    ラッパークラス
-----------------------------
boolean         Boolean
char            Character
byte            Byte
short           Short
int             Integer
long            Long
float           Float
double          Double

拡張for文(foreach文)

ListクラスやMapクラスの全ての要素を取得する場合に拡張for文が便利です。

例えば、配列の場合は次のように使います。

class ForTest1{
  public static void main(String args[]){
    int data[] = {85, 72, 89};

    for (int seiseki: data){
      System.out.println(seiseki);
    }
  }
}

// -----
// 出力結果(System.out.println)
// 85
// 72
// 89

Listクラスの場合は次のように使います。

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

class ForTest2{
  public static void main(String args[]){
    List<String> list = new ArrayList<String>();

    list.add("日本");
    list.add("ブラジル");
    list.add("イングランド");
    list.add("ポルトガル");
    list.add("フランス");

    for(String country : list) {
      System.out.println(country);
    }
  }
}

// -----
// 出力結果(System.out.println)
// 日本
// ブラジル
// イングランド
// ポルトガル
// フランス

オブジェクトの比較

オブジェクトを比較するためには、equalsメソッドを使うことが多いです。


class ObjectTest{
  public static void main(String args[]){
    String str1 = "apple";
    String str2 = new String("apple");

    if (str1 == str2) {
      System.out.println("1は同じです。")
    } else {
      System.out.println("1は違います。")
    }

    if (str1.equals(str2)) {
      System.out.println("2は同じです。")
    } else {
      System.out.println("2は違います。")
    }
  }
}

// -----
// 出力結果(System.out.println)
// 1は違います。
// 2は同じです。

equalsメソッドで比較するとオブジェクトの比較(同じオブジェクトを参照しているかどうか)ではなく値を比較することができます。


今日は、ここまでとしましょう。