finished array impl