リストのretainAllメソッドを正しく使用して交差を求める
7547 ワード
一、retainAll方法
二、batchRemove方法の解析
このcollectionが呼び出しによって変更された場合はtrueを返します.
1.modCount変数についての説明
AbstractListにはmodCount変数が含まれており、その初期値は0であり、セット内のコンテンツが変更されるたびに(add()、remove()などのメソッドを呼び出す)、modCountに1を加算する
2.戻り値の説明
集合A配列のサイズが変更されていない場合はfalseを返します.集合Aと集合Bが全く同じ集合であればfalseも返される.
2つの集合が交差していなくてもtrueが返されます.
したがって,集合Aの大きさが変わったときに返されるのはTrueであり,大きさが変わっていないときに返されるのはFalseであることを覚えておく.
三、retainAllの正しい使い方
1、まずretainAllを呼び出す方法
2.集合の大きさを判断することにより,交点があるか否かを決定する.メソッドが返すTrueとFalseでは判断できません.
転載先:https://www.cnblogs.com/lyajs/p/5737410.html
public boolean retainAll(Collection> c) {
//
return batchRemove(c, true);
}
二、batchRemove方法の解析
このcollectionが呼び出しによって変更された場合はtrueを返します.
// A B
private boolean batchRemove(Collection> c, boolean complement) {
//
final Object[] elementData = this.elementData;
//w:
int r = 0, w = 0;
//
boolean modified = false;
try {
// A
for (; r < size; r++)
// B A
if (c.contains(elementData[r]) == complement)
// 。
elementData[w++] = elementData[r];
} finally {
// c.contains()
if (r != size) {
//
System.arraycopy(elementData, r,
elementData, w,
size - r);
//w A length
w += size - r;
}
// A
if (w != size) {
//
for (int i = w; i < size; i++)
elementData[i] = null;
// (add/remove)
modCount += size - w;
//
size = w;
// true
modified = true;
}
}
return modified;
}
1.modCount変数についての説明
AbstractListにはmodCount変数が含まれており、その初期値は0であり、セット内のコンテンツが変更されるたびに(add()、remove()などのメソッドを呼び出す)、modCountに1を加算する
2.戻り値の説明
集合A配列のサイズが変更されていない場合はfalseを返します.集合Aと集合Bが全く同じ集合であればfalseも返される.
public static void main(String[] args) {
ArrayList listA= new ArrayList();
listA.add("Tom");
ArrayList listB= new ArrayList();
listB.add("Tom");
System.out.println(listA.retainAll(listB)); //false
}
2つの集合が交差していなくてもtrueが返されます.
public static void main(String[] args) {
ArrayList listA= new ArrayList();
listA.add("Tom");
ArrayList listB= new ArrayList();
listB.add("Jack");
System.out.println(listA.retainAll(listB));//true
}
したがって,集合Aの大きさが変わったときに返されるのはTrueであり,大きさが変わっていないときに返されるのはFalseであることを覚えておく.
三、retainAllの正しい使い方
public static void main(String[] args) {
ArrayList listA= new ArrayList();
listA.add("Tom");
ArrayList listB= new ArrayList();
listB.add("Tom");
listA.retainAll(listB);
if(listA.size()>0){
System.out.println(" ");
}else{
System.out.println(" ");
}
}
1、まずretainAllを呼び出す方法
2.集合の大きさを判断することにより,交点があるか否かを決定する.メソッドが返すTrueとFalseでは判断できません.
転載先:https://www.cnblogs.com/lyajs/p/5737410.html