GeoHash { public static List<String> neighbours(String hash) { List<String> list = new ArrayList<String>(); String left = adjacentHash(hash, Direction.LEFT); String right = adjacentHash(hash, Direction.RIGHT); list.add(left); list.add(right); list.add(adjacentHash(hash, Direction.TOP)); list.add(adjacentHash(hash, Direction.BOTTOM)); list.add(adjacentHash(left, Direction.TOP)); list.add(adjacentHash(left, Direction.BOTTOM)); list.add(adjacentHash(right, Direction.TOP)); list.add(adjacentHash(right, Direction.BOTTOM)); return list; } private  GeoHash(); static String adjacentHash(String hash, Direction direction); static String right(String hash); static String left(String hash); static String top(String hash); static String bottom(String hash); static String adjacentHash(String hash, Direction direction, int steps); static List<String> neighbours(String hash); static String encodeHash(double latitude, double longitude); static String encodeHash(LatLong p, int length); static String encodeHash(LatLong p); static String encodeHash(double latitude, double longitude, int length); static LatLong decodeHash(String geohash); static int hashLengthToCoverBoundingBox(double topLeftLat, double topLeftLon,
            double bottomRightLat, double bottomRightLon); static boolean hashContains(String hash, double lat, double lon); static Coverage coverBoundingBox(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon); static Coverage coverBoundingBoxMaxHashes(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon, int maxHashes); static Coverage coverBoundingBox(double topLeftLat, final double topLeftLon,
            final double bottomRightLat, final double bottomRightLon, final int length); static double heightDegrees(int n); static double widthDegrees(int n); static String gridAsString(String hash, int size, Set<String> highlightThese); static String gridAsString(String hash, int fromRight, int fromBottom, int toRight,
            int toBottom); static String gridAsString(String hash, int fromRight, int fromBottom, int toRight,
            int toBottom, Set<String> highlightThese); static final int MAX_HASH_LENGTH; static final int DEFAULT_MAX_HASHES; }
@Test public void testNeighbouringHashes() { String center = "dqcjqc"; Set<String> neighbours = Sets.newHashSet("dqcjqf", "dqcjqb", "dqcjr1", "dqcjq9", "dqcjqd", "dqcjr4", "dqcjr0", "dqcjq8"); assertEquals(neighbours, Sets.newHashSet(neighbours(center))); }