package parser; import java.util.*; public class State implements Comparable { private Set itemSet; private List items; private int name; public State(int name) { this.itemSet = new HashSet<>(); this.items = new ArrayList<>(); this.name = name; } public State() { this(0); } public State(Item item) { this(); addItem(item); } public void setName(int name) { this.name = name; } public int getName() { return this.name; } public List getItems() { return this.items; } public int size() { return items.size(); } /* * true if the item was added, false if it was already in the set */ public boolean addItem(Item item) { if (!itemSet.contains(item)) { itemSet.add(item); items.add(item); return true; } return false; } @Override public int hashCode() { int hash = 7; ArrayList sortedList = new ArrayList<>(items); sortedList.sort(Comparator.comparingInt(Item::hashCode)); for (Item item : sortedList) { hash = 37 * hash + Objects.hashCode(item); } return hash; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final State other = (State) obj; if (items.size() != other.items.size()) { return false; } for (Item item : items) { if (!other.itemSet.contains(item)) { return false; } } return true; } @Override public String toString() { return this.name + ": " + items.toString(); } @Override public int compareTo(State o) { return Integer.valueOf(this.name).compareTo(Integer.valueOf(o.name)); } }