Skip to content

Instantly share code, notes, and snippets.

@9re
Created February 18, 2011 06:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 9re/833349 to your computer and use it in GitHub Desktop.
Save 9re/833349 to your computer and use it in GitHub Desktop.
equal & hashCode
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ListTest extends Activity {
public static class ModelUnsafe {
String id;
public ModelUnsafe(String id) {
this.id = id;
}
@Override
public String toString() {
return "[model : " + id + "]";
}
}
public static class ModelSafe extends ModelUnsafe {
public ModelSafe(String id) {
super(id);
}
@Override
public boolean equals(Object other) {
if (!(other instanceof ModelSafe)) return false;
ModelSafe otherModel = (ModelSafe) other;
return id.equals(otherModel.id);
}
@Override
public int hashCode() {
return id.hashCode();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ModelUnsafe[] modelsA = new ModelUnsafe[]{
new ModelUnsafe("A"),
new ModelUnsafe("B"),
new ModelUnsafe("C"),
new ModelUnsafe("D")
};
ModelUnsafe[] modelsB = new ModelUnsafe[]{
new ModelUnsafe("A"),
new ModelUnsafe("C"),
new ModelUnsafe("D"),
new ModelUnsafe("E")
};
List<ModelUnsafe> modelsListA = Arrays.asList(modelsA);
List<ModelUnsafe> modelsListB = Arrays.asList(modelsB);
log("calc diff Model");
calcDiff(modelsListA, modelsListB);
ModelSafe[] modelSafesA = new ModelSafe[]{
new ModelSafe("A"),
new ModelSafe("B"),
new ModelSafe("C"),
new ModelSafe("D")
};
ModelSafe[] modelSafesB = new ModelSafe[]{
new ModelSafe("A"),
new ModelSafe("C"),
new ModelSafe("D"),
new ModelSafe("E")
};
List<ModelSafe> modelSafesListA = Arrays.asList(modelSafesA);
List<ModelSafe> modelSafesListB = Arrays.asList(modelSafesB);
log("calc diff ModelSafe");
calcDiff(modelSafesListA, modelSafesListB);
}
<E> void calcDiff(List<E> a, List<E> b) {
List<E> intersection = new ArrayList<E>(a);
List<E> removed = new ArrayList<E>(b);
List<E> added = new ArrayList<E>(a);
intersection.retainAll(removed);
added.removeAll(intersection);
removed.removeAll(intersection);
log("added : " + added.size() + " " + added);
log("removed : " + removed.size() + " " + removed);
log("intersection : " + intersection.size() + " " + intersection);
}
void log(String msg) {
Log.d("test", msg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment