For me, this bloc of code fullfill the conditions number 4 and 5:
if (checkCollision(newHead))
    isAlive = false;
else
{
    snakeParts.add(0, newHead);
    if (checkCollision(apple))
        apple.isAlive = false;
    else
        removeTail();
}
So what's wrong there?