Javaを使用してリストを反復し、特定の基準に基づいてリストを更新しています。しかし、ConcurrentModificationException
を複製リストを使って提供するので、これでも同じ例外があります。オブジェクトと重複リストを使用する場合のJavaリストのConcurrentModificationException
フォルダ(1つのストレージ用に1つのフォルダ)として表される仮想記憶域を表すクラスStorage
があります。このクラスには、そのフォルダ内にあるファイルの一覧を示す属性fileList
が含まれています。クラスは次の通りです
public class Storage
{
// List of files in storage
private List<File> fileList = new ArrayList<File>();
// Occupied size in MB
private double occupiedStorage;
// Location of storage folder
private String location;
public Storage(String loca) // Create a storage
{
this.location = loca;
this.occupiedSize = 0;
}
public addFile(File f) // Add file to storage
{
// Copy the file to folder in location 'this.location'
this.fileList.add(f);
this.occupiedSize = this.occupiedSize + f.length()/1048576.0;
}
public List<File> getFilesList() // Get list of files in storage
{
return this.filesList;
}
public double getOccupiedSize() // Get the occupied size of storage
{
return this.occupiedSize;
}
}
私は10個のオブジェクトを使用して合計10個のストレージを作成しましたが、それぞれに別々のフォルダがあります。私はforループとthis.addFile(f)
関数の呼び出しを使用して、多くの異なるファイルをすべてのフォルダに追加しました。
は、その後、私は一定の基準を満たす特定のストレージから特定のファイルだけを削除したいと私はStorage
クラスに次の削除機能を追加し、
public void updateFileList()
{
List<File> files = new ArrayList<File>();
files = this.getFilesList();
for (File f : files)
{
if (/*Deletion criteria satisfied*/)
{
f.delete();
this.getFilesList().remove(f);
this.occupiedSize = this.occupiedSize - f.length()/1048576.0;
}
}
}
しかし、これは私がEnhanced For Loop
でConcurrentModificationException
を提供しますupdateFileList()
機能で使用します。拡張されたforループの中で、私は不要なファイルを削除してthis.getFilesList()
リストを更新しています。繰り返しはfiles
という重複リストを使って行います。では、どうして私はConcurrentModificationException
例外を受け取りますか?何か間違っているのですか?