Вам надо не создавать новый объект, а делать метод-селектор, который будет проверять существование дороги и если она существует - возвращать существующую, если нет - то создавать новую. В данном случае можно реализовать проверку так:
Set<Road> roads = new HashSet<Road>();
Road getRoad(c1, c2){
for(Road r:roads) if((r.city1.equals(c1) && r.city2.equals(c2)) || (r.city2.equals(c1) && r.city1.equals(c2))) return r;
Road r = new Road(c1, c2);
roads.add(r);
return r;
}
Если городов будет больше, имеет смысл использовать сеты вместо перечислений городов в отдельных переменных.
P.s. писал с мобильника, могут быть ошибки