It seems that for you, vertices v1 and v2 in the example are distinguishable. Then you must make sure that they're distinguishable for the graph as well. In other words, make sure that v1.equals(v2) returns false. You might want to consider adding a member variable "id" (or something) to Vertex, and base equals and hashcode on that variable. The contract of that member variable would be that two vertices having the same id are equal.
If you then create two vertices with the same field, but different ids, then v1.equals(v2) will be false, and the two Vertex objects represent different vertices in the graph. For example:
Vertex v1 = new Vertex("a", 1);
Vertex v2 = new Vertex("b", 1);
The constructor of Vertex would then have to look like:
public Vertex(String id, int field) {
this.id = id;
this.field = field;
}
Another solution would be to simply remove the hashcode and equals methods from Vertex, so that the inherited methods from Object are used, in which case two Vertex instances are equal if and only if they refer to the same object (i.e., memory address).
The same holds for the Edge class. I'm not really sure about how you intend to use the Edge's field property, but I'd simply remove it to avoid running into the same kind of problem.