【Android】HashSetからデータを削除する方法をサンプルコード付きで解説
はじめに
この記事では、AndroidアプリでHashSet(ハッシュセット)からデータを削除する方法を、実際に動作するサンプルコードとともに解説します。HashSetは重複する要素を許さないSetインターフェースの実装クラスで、要素の追加にはadd()、削除にはremove()メソッドを使用します。本サンプルでは、EditTextに入力された名前をHashSetに保存し、その内容をArrayList経由でListViewに表示しながら、削除ボタンによる要素の除去までを実装していきます。
ステップ1:新規プロジェクトを作成する
Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な項目をすべて入力してプロジェクトを作成してください。
ステップ2:レイアウトファイル(activity_main.xml)を編集する
res/layout/activity_main.xml に以下のコードを追加します。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:hint="Enter Name"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/save"
android:text="Save"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/refresh"
android:text="Refresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/delete"
android:text="Delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
</LinearLayout>このレイアウトでは、名前を入力するためのEditTextと、「Save(保存)」「Refresh(更新)」「Delete(削除)」の3つのボタン、さらに登録済みデータを一覧表示するListViewを縦方向に並べています。ユーザーが保存ボタンをタップすると入力内容がHashSetに格納されてListViewへ反映され、削除ボタンをタップすると、入力された名前と一致する要素がリストから取り除かれます。
ステップ3:MainActivity.javaを実装する
src/MainActivity.java に以下のコードを追加します。
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
Set set = new HashSet<String>();
private ListView listView;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
setContentView(R.layout.activity_main);
array_list = new ArrayList<>();
name = findViewById(R.id.name);
listView = findViewById(R.id.listView);
findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
arrayAdapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
}
});
findViewById(R.id.delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty()) {
set.remove(name.getText().toString());
array_list.clear();
array_list.addAll(set);
arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
Toast.makeText(MainActivity.this, "Deleted", Toast.LENGTH_LONG).show();
}
}
});
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty()) {
set.add(name.getText().toString());
array_list.clear();
array_list.addAll(set);
arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
} else {
name.setError("Enter NAME");
}
}
});
}
}コードのポイント
- 保存処理:
set.add()でHashSetに入力値を追加し、array_listを一度クリアしてからaddAll(set)で同期し直し、ArrayAdapterを介してListViewを更新します。 - 削除処理:
set.remove(入力値)で該当する要素をHashSetから削除し、保存時と同じ手順でListViewを再構築します。 - 更新処理:
notifyDataSetChanged()やinvalidateViews()を呼び出して、画面の表示状態を再描画します。 - 入力欄が空のまま保存ボタンが押された場合は、
setError()によってエラーメッセージが表示されます。
なお、本サンプルは古いsupportライブラリ(android.support.v7.app.AppCompatActivity)を使用しているため、現在のAndroid Studioで試す場合は androidx.appcompat.app.AppCompatActivity に読み替えることをおすすめします。
動作確認
それではアプリを実行してみましょう。あらかじめ、実機のAndroidスマートフォンをパソコンに接続しておいてください。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーのRunアイコンをクリックします。実行デバイスとして自分のモバイル端末を選択すると、端末側に以下のような初期画面が表示されます。

上記の結果では、2件のレコードが登録されていることが確認できます。

続いて削除ボタンをタップすると、上図のように該当するレコードがListViewから削除されます。
まとめ
HashSetの remove() メソッドを使えば、Androidアプリでも特定のデータを簡単に削除できます。HashSetは重複を自動的に排除してくれるため、ユーザー入力を一意に管理したい場合にも非常に便利です。ぜひ本サンプルをベースに、ご自身のアプリ開発に活かしてみてください。
-
Androidで写真のEXIFメタデータを削除する方法【プライバシー保護】
デジタルカメラやスマートフォンで写真を撮影すると、EXIF(Exchangeable Image File Format)と呼ばれるメタデータが自動的に画像へ埋め込まれます。 EXIFデータには、撮影日時、GPSによる位置情報、カメラやスマートフォンの機種名、フラッシュの使用有無など、さまざまな情報が記録されています。 このメタデータは多くの場面で便利ですが、インターネット上に公開されるとプライバシーを脅かす原因にもなりかねません。アップロードした写真から居場所を特定されたり、最悪の場合、不利益な形で悪用されるリスクもあるのです。 Imgurなど一部のサービスはメタデータを自動的に削除して
-
Androidスマホからウイルス・マルウェアを削除する方法|症状別の対処法を徹底解説
近年、Androidユーザーは急速に増加し、かつてWindowsパソコンでしか使えなかった機能がスマートフォンの世界にも広がりました。インターネットへの即時アクセスやオンラインアプリなど革新的な機能を手軽に楽しめる一方で、ウイルスやマルウェアの脅威も同時に拡大しています。「良いものには必ず影がある」という言葉の通り、高度化するAndroidデバイスの影こそがウイルスなのです。これらの厄介な存在はOS全体に悪影響を及ぼし、スマートフォンを台無しにしてしまいます。もしスマホがマルウェア攻撃の被害に遭っているなら、この記事を読んでAndroid端末からウイルスを取り除き、ウイルスによるポップアップ