Android
 Computer >> コンピューター >  >> プログラミング >> Android

AndroidでArrayListの重複値を別のArrayListへ抽出する方法【サンプルコード付き】

概要

本記事では、Androidアプリ開発においてArrayList<String>に含まれる重複する値を検出し、それらを別のArrayListに抽出してListViewに表示する方法を、実際のサンプルコードとともに解説します。重複チェックにはHashSetの特性を活用するシンプルかつ効率的な手法を紹介します。

手順1:プロジェクトの新規作成

Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成してください。

手順2:レイアウトファイル(activity_main.xml)の編集

res/layout/activity_main.xml に以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</androidx.constraintlayout.widget.ConstraintLayout>

上記のコードでは、後ほど抽出した重複項目を一覧表示するために、ListViewを配置しています。なお、古いプロジェクトではサポートライブラリのConstraintLayoutが使われることがありますが、現在はAndroidXへの移行が推奨されています。

手順3:MainActivity.java の実装

src/MainActivity.java に以下のコードを追加します。

package com.example.andy.myapplication;

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {

    ListView list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Set<String> set = new HashSet<>();
        ArrayList<String> mainListItem = new ArrayList<>();
        mainListItem.add("Sai");
        mainListItem.add("Sai");
        mainListItem.add("ram");
        mainListItem.add("Sai krishna");
        mainListItem.add("Sai Ram Krishna");
        mainListItem.add("tutorialspoint.com");
        mainListItem.add("tutorialspoint.com");

        ArrayList<String> duplicates = new ArrayList<>();
        for (String s : mainListItem) {
            if (!set.add(s)) {
                duplicates.add(s);
            }
        }

        list = findViewById(R.id.list);
        ArrayAdapter arrayAdapter = new ArrayAdapter(MainActivity.this,
                android.R.layout.simple_list_item_1, duplicates);
        list.setAdapter(arrayAdapter);
    }
}

上記のコードでは、次のようなデータを持つArrayListを用意しています。

mainListItem.add("Sai");
mainListItem.add("Sai");
mainListItem.add("ram");
mainListItem.add("Sai krishna");
mainListItem.add("Sai Ram Krishna");
mainListItem.add("tutorialspoint.com");
mainListItem.add("tutorialspoint.com");

このリストの中で「Sai」と「tutorialspoint.com」が重複している値です。

重複検出の仕組み

重複の判定にはHashSetを利用しています。Set.add()メソッドは「同じ要素がまだ存在しない場合はtrue、すでに存在する場合はfalse」を返すという特性があります。このため、!set.add(s)がtrueになる要素、つまり2回目以降に出現した値だけをduplicatesリストに追加することで、元のリストの順序を保ちながら重複値のみを効率よく抽出できます。

アプリの実行と結果確認

実際のAndroid端末をパソコンに接続したうえで、アプリを実行してみましょう。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。接続済みのモバイルデバイスを選択すると、端末の画面に結果が表示されます。

AndroidでArrayList String の重複値を別のArrayListへ抽出する方法【サンプルコード付き】

上記の実行結果のように、ArrayListから検出された重複値だけがListViewに一覧表示されます。この手法は、名前やURLなど同一データの混在を防ぎたい場面で幅広く応用できます。

  1. AndroidでImageViewの幅と高さを取得する方法【サンプルコード付き】

    この記事では、Androidアプリ開発において android.widget.ImageView の幅(width)と高さ(height)を取得する方法を、実際に動作するサンプルコードとともにステップごとに解説します。実装の全体像ImageViewのサイズを取得するには、getWidth() メソッドと getHeight() メソッドを使用します。ここでは、ボタンをタップしたときにImageViewのサイズを取得し、TextViewに結果を表示するシンプルなサンプルアプリを作成します。手順1:新しいプロジェクトを作成するAndroid Studioを起動し、メニューから「File」→「New

  2. AndroidのWebViewでWebページのコンテンツを取得する方法【コード付きで解説】

    Androidアプリ開発において、WebViewを使えばアプリ内でWebページを表示できます。この記事では、WebViewでページを読み込むだけでなく、そのコンテンツ(HTMLソース)を取得する方法まで、サンプルコード付きで段階的に解説します。全体の流れ本記事の手順は以下の4ステップです。Android Studioで新規プロジェクトを作成するレイアウトファイル(activity_main.xml)にWebViewを配置するMainActivity.javaでURLを読み込む処理を記述するAndroidManifest.xmlにインターネット権限を追加するステップ1:新規プロジェクトを作成する