レスしてくれた方々ありがとうございました。
教えて頂いたことを調べてすこし変更し、このようにしました。

for(int i=0; i<nodeList.getLength(); i++){
 Element elem = (Element)nodeList.item(i);
 myHashSet.add(
  new MyObj(
   elem.getAttribute("attr1"),
   elem.getAttribute("attr2") )
  )
 );
}

このクラスの変更と言えば、ご指摘頂いたように
ArrayListをHashSetに変更した点です。
(Setの中でも今回はHashSetが一番向いていると思うのでこれにしました)

そして、MyObjにequalsメソッドを実装しました。
public boolean equals(MyObj myObj){
 if( p1 == o.getP1() && p2 == o.getP2() )
  return true;
 else
  return false;
}

これで実行してみたのですが、相変わらず全てのMyObjがmyHashSetに追加されてしまいます。
Setがaddする時に、どのように重複データか判定するのか、Setインターフェイスのドキュメントを読んでみると
>つまり、セット内に、(o==null ? e==null : o.equals(e)) に該当する要素 e がなかった場合は、指定された要素 o をセットに追加
とあるのですが、上のコードで言うMyObj#equalsをreturn true;だけにしても結果は同じで、
デバッグで確認しても、MyObj#equalsは呼ばれていません。

自分の考えの間違えをご指摘頂けませんでしょうか?