カスタムリストモデルで動作する JList を持つ Swing アプリケーションがあります。
モデルには、使用されるオブジェクトを格納するための ArrayList があります。状況は次のとおりです。
アプリケーションを閉じると、listmodel 内のすべてのオブジェクトがシリアル化され (デフォルトの方法では、クラスは を実装するだけですSerializable
)、 を介してファイルに書き込まれますObjectOutputStream
。アプリケーションが起動すると、すべてのオブジェクトがファイルから読み込まれ、ListModel
再びカスタムに保存されます。
ユーザーが指定したファイルからオブジェクトもインポートできるようにする機能を追加しようとしています。別のクラスの静的メソッドは、ファイルからすべてのオブジェクトを読み取り、ArrayList
. 次に、クラスで for-each ループを使用して、返されたMainForm
から各オブジェクトを に格納します。ループで、特定のオブジェクトが既に含まれているかどうかを確認したいのですが、これは機能しません。ArrayList
ListModel
ListModel
コードでは、次のことを行っています。
for(MyObject o: readObjects) {
if(!myListModel.contains(o)) //listmodel just calls contains() on its ArrayList
myListModel.addElement(o);
}
ただし、オブジェクトが既に ArrayList にある場合でも (同じファイルからオブジェクトをインポートし続けます)、それらは追加されます。
問題は、デシリアライズされたときにオブジェクトが等しくなくなったのはなぜですか。とにかくそれらを比較する方法はありますか?