Javaアルゴリズム入門:基本データ構造とコレクション操作

基本フォーマット

//Javaプログラムの基本構造
public class AlgorithmBasics {
    public static void main(String[] arguments) {
        //変数宣言
        int number = 100;
        long bigNumber = Long.MAX_VALUE - 500L;
        
        //出力処理
        System.out.print(number);    //改行なし出力
        System.out.println(bigNumber); //改行あり出力
    }
}

基本データ型

競技プログラミングで頻繁に使用されるデータ型を紹介します。

整数型

  • int: 32ビット符号付き整数。範囲: -2³¹ ~ 2³¹-1
  • long: 64ビット符号付き整数。範囲: -2⁶³ ~ 2⁶³-1

浮動小数点数

  • float: 32ビット単精度浮動小数点数
  • double: 64ビット倍精度浮動小数点数

その他の型

  • boolean: true/falseの真理値
  • char: 16ビットUnicode文字

入出力処理

import java.util.Scanner;

public class InputOutput {
    public static void main(String[] args) {
        Scanner inputReader = new Scanner(System.in);
        
        int integerValue = inputReader.nextInt();
        System.out.println(integerValue);
        
        String textValue = inputReader.next();
        System.out.println(textValue);
    }
}

配列操作

import java.util.*;

public class ArrayOperations {
    public static void main(String[] args) {
        int[] fixedArray = new int[8]; //固定長配列
        int[] dynamicArray = {5, 3, 8, 1, 9}; //初期化済み配列
        
        System.out.println("配列長さ: " + fixedArray.length);
        
        //配列の走査
        for (int index = 0; index < dynamicArray.length; index++) {
            System.out.println(dynamicArray[index]);
        }
    }
}

コレクションフレームワーク

HashSet(重複排除)

import java.util.*;

public class SetExample {
    public static void main(String[] args) {
        Set<Integer> numberSet = new HashSet<>();
        
        numberSet.add(10);
        boolean result = numberSet.add(10); //重複追加
        
        System.out.println("追加結果: " + result); //falseを出力
        System.out.println("包含確認: " + numberSet.contains(10));
        
        numberSet.remove(10);
        numberSet.clear();
    }
}

ArrayList(動的配列)

import java.util.*;

public class ListExample {
    public static void main(String[] args) {
        List<Integer> numberList = new ArrayList<>();
        
        numberList.add(50);
        numberList.add(30);
        numberList.add(70);
        
        System.out.println("リストサイズ: " + numberList.size());
        System.out.println("要素取得: " + numberList.get(1));
    }
}

HashMap(キー値マップ)

import java.util.*;

public class MapExample {
    public static void main(String[] args) {
        Map<Integer, String> dataMap = new HashMap<>();
        
        dataMap.put(1, "Tokyo");
        dataMap.put(2, "Osaka");
        
        String city = dataMap.get(2);
        System.out.println("取得値: " + city);
        System.out.println("マップサイズ: " + dataMap.size());
        System.out.println("デフォルト値: " + 
            dataMap.getOrDefault(3, "Unknown"));
    }
}

Stack(LIFO構造)

import java.util.*;

public class StackExample {
    public static void main(String[] args) {
        Stack<String> itemStack = new Stack<>();
        
        itemStack.push("First");
        itemStack.push("Second");
        itemStack.push("Third");
        
        while (!itemStack.isEmpty()) {
            System.out.println(itemStack.pop());
        }
    }
}

Queue(FIFO構造)

import java.util.*;

public class QueueExample {
    public static void main(String[] args) {
        Queue<Integer> numberQueue = new LinkedList<>();
        
        numberQueue.offer(100);
        numberQueue.offer(200);
        numberQueue.offer(300);
        
        while (!numberQueue.isEmpty()) {
            System.out.println(numberQueue.poll());
        }
    }
}

ソート操作

配列ソート

import java.util.*;

public class ArraySorting {
    public static void main(String[] args) {
        Integer[] numbers = {45, 12, 78, 23, 56};
        
        //昇順ソート
        Arrays.sort(numbers);
        
        for (int num : numbers) {
            System.out.print(num + " ");
        }
    }
}

リストソート

import java.util.*;

public class ListSorting {
    public static void main(String[] args) {
        List<Integer> numberList = new ArrayList<>();
        
        numberList.add(88);
        numberList.add(42);
        numberList.add(65);
        numberList.add(27);
        
        //降順ソート
        Collections.sort(numberList, (a, b) -> b - a);
        
        for (int value : numberList) {
            System.out.print(value + " ");
        }
    }
}

文字列操作

import java.util.*;

public class StringOperations {
    public static void main(String[] args) {
        StringBuilder textBuilder = new StringBuilder();
        
        textBuilder.append("Hello");
        textBuilder.append(" ");
        textBuilder.append("World");
        textBuilder.reverse();
        
        System.out.println(textBuilder.toString());
    }
}

計算量分析

コードパターン時間計算量
単一ループO(n)
二重ループO(n²)
指数増加ループO(log n)

タグ: Java アルゴリズム データ構造 コレクション 計算量

5月23日 08:00 投稿