Comparing list elements in an effective way
Instead of implementing isSame implement equals and hashCode. After that you could use a HashSet (or LinkedHashSet if the order of elements is important). Set is a collection that contains no duplicate elements and inserting/searching is much faster than searching in a list.

Set&lt;GameState&gt; opened = new LinkedHashSet&lt;GameState&gt;();

public void addEverything() {
    List&lt;GameState&gt; list = current.neighbours;
    for (GameState state : list) {
        opened.add(state);
    }
}


If you need a list, you can convert it back after the loop:

List&lt;GameState&gt; openedList = new ArrayList&lt;GameState&gt;(opened);


See also: Overriding equals and hashCode in Java
According to the Java Code Conventions, class names in Java usually starts with uppercase letters.