removeAllメソッドの使用に関する質問
2889 ワード
次のコードを見てください.
印刷結果は2,4
次のコードを見てください.
印刷結果は4ですが、なぜremoveAllが無効になったのでしょうか?
どうしてこんなことになったの?もしかしてremoveAllの方法に問題があるのでしょうか?
removeAllメソッドを実行するときは、まず集合要素を比較し、要素が等しい場合に除去操作を実行するので、これといえば、何が起こっているのかよく知っている人が多いと思いますが、等しくないので除去は実行されません.
なぜ等しくない場合が発生し、エンティティクラスの属性が同じであるのに、なぜ等しくないのですか?
エンティティクラスにはOverride hashCodeとequalsメソッドがないからです!removeAllメソッドを実行する場合はequalsメソッドで集合要素が等しいかどうかを判断し、Override equalsメソッドがない場合はデフォルトで比較対象となるため、上記の問題が発生します!
結局、やはり基礎がしっかりしていないのか、同時に自分にも目を覚まして、実体クラスを書くときはできるだけOverride hashCodeとequalsの方法を書いて、いつ問題が発生するか分からない.
次はEQUALSを書き換えた結果です.
結果は2です
public class test {
public static void main(String agrc[]){
List a = new ArrayList();
List b = new ArrayList();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
b.add("1");
b.add("3");
a.removeAll(b);
System.out.println(a);
}
}
印刷結果は2,4
次のコードを見てください.
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String agrc[]){
List s1 = new ArrayList();
List s2 = new ArrayList();
s1.add(new Student(" "));
s1.add(new Student(" "));
s1.add(new Student(" "));
s1.add(new Student(" "));
s2.add(new Student(" "));
s2.add(new Student(" "));
s1.removeAll(s2);
System.out.println(s1.size());
}
}
class Student{
String name;
/**
* @param string
*/
public Student(String name) {
this.name = name;
}
}
印刷結果は4ですが、なぜremoveAllが無効になったのでしょうか?
どうしてこんなことになったの?もしかしてremoveAllの方法に問題があるのでしょうか?
removeAllメソッドを実行するときは、まず集合要素を比較し、要素が等しい場合に除去操作を実行するので、これといえば、何が起こっているのかよく知っている人が多いと思いますが、等しくないので除去は実行されません.
なぜ等しくない場合が発生し、エンティティクラスの属性が同じであるのに、なぜ等しくないのですか?
エンティティクラスにはOverride hashCodeとequalsメソッドがないからです!removeAllメソッドを実行する場合はequalsメソッドで集合要素が等しいかどうかを判断し、Override equalsメソッドがない場合はデフォルトで比較対象となるため、上記の問題が発生します!
結局、やはり基礎がしっかりしていないのか、同時に自分にも目を覚まして、実体クラスを書くときはできるだけOverride hashCodeとequalsの方法を書いて、いつ問題が発生するか分からない.
次はEQUALSを書き換えた結果です.
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String agrc[]){
List s1 = new ArrayList();
List s2 = new ArrayList();
s1.add(new Student(" "));
s1.add(new Student(" "));
s1.add(new Student(" "));
s1.add(new Student(" "));
s2.add(new Student(" "));
s2.add(new Student(" "));
s1.removeAll(s2);
System.out.println(s1.size());
}
}
class Student{
String name;
/**
* @param string
*/
public Student(String name) {
this.name = name;
}
public boolean equals( Object obj){
if (obj == null) return false ;
if (this == obj) {
return true;
}
if (obj instanceof Student){
Student s = (Student) obj;
if(this.name.equals(s.name)){
return true;
}
}
return false;
}
}
結果は2です