配列の操作
配列およびArrayListの基本的使い方を紹介します。
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
//ArrayList配列の宣言
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
//ログ出力の宣言
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//配列を宣言
Log.d("処理", "配列を宣言");
Integer[] arrayNum=new Integer[3];
String[] arrayStr=new String[3];
ArrayList<Integer> arrayNum2=new ArrayList<Integer>();
ArrayList<String> arrayStr2=new ArrayList<String>();
//データを取得する
Log.d("処理", "データを取得");
arrayStr=getArray(arrayNum, arrayStr);
arrayStr2=getArray(arrayNum2, arrayStr2);
//結果を出力する
Log.d("処理", "結果を出力");
printArray(arrayNum, arrayStr);
printArray(arrayNum2, arrayStr2);
//(最初の)要素を削除します
Log.d("処理", "要素を削除");
arrayNum=removeArrayNum(0, arrayNum);
arrayStr=removeArrayStr(0, arrayStr);
arrayNum2=removeArrayNum(0, arrayNum2);
arrayStr2=removeArrayStr(0, arrayStr2);
//結果を出力する
Log.d("処理", "結果を出力");
printArray(arrayNum, arrayStr);
printArray(arrayNum2, arrayStr2);
}
//配列の結果を出力
private void printArray(Integer[] arrayNum, String[] arrayStr)
{
//ArrayListの配列のサイズは「length」
for(int i=0; i < arrayNum.length; i++)
{
Log.d("i", String.valueOf(i));
Log.d("arrayNum", String.valueOf(arrayNum[i]));
Log.d("arrayStr", arrayStr[i]);
}
}
//ArrayListの結果を出力
private void printArray(ArrayList<Integer> arrayNum, ArrayList<String> arrayStr)
{
//ArrayListの配列のサイズは「size」
for(int i=0; i < arrayNum.size(); i++)
{
Log.d("i", String.valueOf(i));
Log.d("arrayNum2", String.valueOf(arrayNum.get(i)));
Log.d("arrayStr2", arrayStr.get(i));
}
}
//配列から指定のインデックスのデータを削除
private Integer[] removeArrayNum(int idx, Integer[] arrayNum)
{
//数字の配列から指定のインデックスの要素を削除します
List<Integer> arrayNum2=new ArrayList<Integer>(Arrays.asList(arrayNum));
arrayNum2.remove(idx);
arrayNum=(Integer[])arrayNum2.toArray(new Integer[arrayNum2.size()]);
return arrayNum;
}
//配列から指定のインデックスのデータを削除
private String[] removeArrayStr(int idx, String[] arrayStr)
{
//文字列の配列から指定のインデックスの要素を削除します
List<String> arrayStr2=new ArrayList<String>(Arrays.asList(arrayStr));
arrayStr2.remove(idx);
arrayStr=(String[])arrayStr2.toArray(new String[arrayStr2.size()]);
return arrayStr;
}
//ArrayListから指定のインデックスのデータを削除
private ArrayList<Integer> removeArrayNum(int idx, ArrayList<Integer> arrayNum)
{
arrayNum.remove(idx);
return arrayNum;
}
//ArrayListから指定のインデックスのデータを削除
private ArrayList<String> removeArrayStr(int idx, ArrayList<String> arrayStr)
{
arrayStr.remove(idx);
return arrayStr;
}
private String[] getArray(Integer[] arrayNum, String[] arrayStr)
{
Integer iData=0;
String sData="";
for(int i=0; i < 3; i++)
{
arrayNum[i]=getDataNum(i);
arrayStr[i]=getDataStr(i);
}
return arrayStr;
}
private ArrayList<String> getArray(ArrayList<Integer> arrayNum, ArrayList<String> arrayStr)
{
Integer iData=0;
String sData="";
for(int i=0; i < 3; i++)
{
arrayNum.add(getDataNum(i));
arrayStr.add(getDataStr(i));
}
return arrayStr;
}
private Integer getDataNum(int idx)
{
Integer iData=0;
switch (idx)
{
case 0:
iData=10;
break;
case 1:
iData=20;
break;
case 2:
iData=30;
break;
}
return iData;
}
private String getDataStr(int idx)
{
String sData="";
switch (idx)
{
case 0:
sData="あAa";
break;
case 1:
sData="いBb";
break;
case 2:
sData="うCc";
break;
}
return sData;
}
}
|
配列は要素数を決定してから使用します。
(例)
Integer[] arrayNum=new Integer[3];
String[] arrayStr=new String[3];
要素を決定したインデックスに対してデータを格納できます。
(例)
arrayNum[0]=10;
arrayStr[0]="あああ";
配列のデータを取得します。
(例)
Log.d("arrayNum", String.valueOf(arrayNum[i]));
Log.d("arrayStr", arrayStr[i]);
指定した要素を削除します。
(例)
//数字の配列から指定のインデックスの要素を削除します
List arrayNum2=new ArrayList(Arrays.asList(arrayNum));
arrayNum2.remove(idx);
arrayNum=(Integer[])arrayNum2.toArray(new Integer[arrayNum2.size()]);
(例)
//文字列の配列から指定のインデックスの要素を削除します
List arrayStr2=new ArrayList(Arrays.asList(arrayStr));
arrayStr2.remove(idx);
arrayStr=(String[])arrayStr2.toArray(new String[arrayStr2.size()]);
ArrayListはnewで宣言して使用します。
(例)
ArrayList arrayNum2=new ArrayList();
ArrayList arrayStr2=new ArrayList();
配列にはaddでデータを設定します。
配列のデータを取得します。
(例)
Log.d("arrayNum2", String.valueOf(arrayNum.get(i)));
Log.d("arrayStr2", arrayStr.get(i));
指定した要素を削除します。
(例)
arrayNum.remove(idx);
arrayStr.remove(idx);
実行結果
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/処理: 配列を宣言
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/処理: データを取得
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/処理: 結果を出力
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 0
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum: 10
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr: あAa
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 1
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum: 20
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr: いBb
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 2
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum: 30
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr: うCc
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 0
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum2: 10
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr2: あAa
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 1
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum2: 20
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr2: いBb
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 2
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum2: 30
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr2: うCc
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/処理: 要素を削除
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/処理: 結果を出力
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 0
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum: 20
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr: いBb
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 1
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum: 30
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr: うCc
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 0
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum2: 20
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr2: いBb
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/i: 1
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayNum2: 30
10-05 11:23:57.260 5783-5783/com.example.test.test10 D/arrayStr2: うCc
また既存データの入れ替えはsetを使います。
ArrayList配列.set(0から始まるインデックス番号, データ);
指定の位置にデータを入れるときはaddに引数を2個指定してデータを入れます。
ArrayList配列.add(0から始まるインデックス番号, データ);
インデックスに「0」を設定すると既存の「0」の前にデータを入れることになるので
一番最初にデータが入ります。
他で作った配列をreturnで再格納できることを確認するためのテスト
package test.example.com.test;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class clsTest1 {
//コンストラクタに初期化処理を呼ぶ
clsTest1()
{
init();
}
//使用する配列を初期化
private void init()
{
arrayData=new ArrayList<>();
}
//クラスで宣言した配列
private List<String>arrayData=null;
//クラスで生成した配列を戻す
public List<String> getArray()
{
return arrayData;
}
//配列にデータを作成
public List<String> test1()
{
List<String> array=new ArrayList<>();
for(int i=0;i<3;i++)
{
array.add("aaa"+String.valueOf(i+1));
}
//格納する配列データをクリアしておく
arrayData.clear();
//作成したローカル配列データをprivate配列にデータをコピー
for(int i=0;i<array.size();i++)arrayData.add(array.get(i));
//作成した配列を戻す
return array;
}
//既存のprivate配列にデータを追加
public void addArray()
{
arrayData.add("ccc");
Log.d("addArray","course in!!" + " size:" + String.valueOf(arrayData.size()));
}
}
|
クラスの呼び元
package test.example.com.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test1();
}
private void test1()
{
//クラスをインスタンス化
clsTest1 cls=new clsTest1();
//クラスで生成した配列をこちらのローカル配列に入れるため配列を準備
List<String> array=new ArrayList<>();
//生成した配列をローカル配列オブジェクトに格納
array=cls.test1();
Log.d("start","---------------------------------");
for(int i=0;i<array.size();i++)
{
Log.d("i:",String.valueOf(i) + " " + array.get(i));
}
Log.d("end","---------------------------------");
//クラス側の配列にデータを追加
cls.addArray();
Log.d("start","---------------------------------");
//クラスで生成した現時点の配列データをローカル配列に格納
array=cls.getArray();
for(int i=0;i<array.size();i++)
{
Log.d("i:",String.valueOf(i) + " " + array.get(i));
}
Log.d("end","---------------------------------");
}
//[実行結果]
//これにより作った配列結果をreturnでそのまま渡せることがわかる
/*
10-27 08:52:32.640 10831-10831/test.example.com.test D/start: ---------------------------------
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 0 aaa1
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 1 aaa2
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 2 aaa3
10-27 08:52:32.650 10831-10831/test.example.com.test D/end: ---------------------------------
10-27 08:52:32.650 10831-10831/test.example.com.test D/addArray: course in!! size:4
10-27 08:52:32.650 10831-10831/test.example.com.test D/start: ---------------------------------
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 0 aaa1
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 1 aaa2
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 2 aaa3
10-27 08:52:32.650 10831-10831/test.example.com.test D/i:: 3 ccc
10-27 08:52:32.650 10831-10831/test.example.com.test D/end: ---------------------------------
*/
}
|
|
|