PointList extends ArrayList<T> { @Override public boolean add(final T geoPoint) { clearXYValues(); return super.add(geoPoint); } PointList(PointFactory factory);  PointList(PointFactory factory, final Collection<T> geoPoints); double calculateMedianReferencePointDistance(final T referencePoint); T getMedianPoint(); T getAveragePoint(); double getAverageX(); double getAverageY(); double getMedianX(); double getMedianY(); List<Double> getXValues(); List<Double> getYValues(); @Override void clear(); @Override boolean add(final T geoPoint); @Override void add(int index, T element); @Override boolean addAll(Collection<? extends T> c); @Override boolean addAll(int index, Collection<? extends T> c); @Override T remove(int index); @Override boolean remove(Object o); @Override T set(int index, T element); @Override boolean removeAll(Collection<?> c); @Override boolean retainAll(Collection<?> c);  }
@Test public void testBasics() { PointList pl = new PointList(new XYPointFactory()); assertEquals(0, pl.size()); pl.add(new XYPoint(1,1)); assertEquals(1, pl.size()); pl = new PointList(new XYPointFactory(), pointsLatLon); assertEquals(3, pl.size()); }