more optimize, incluing:
  --use [System.arraycopy] instead [for loop] for array assignment
  --optimize [for loop]
  --use [ArrayList] as stack and replace all [LinkedList]