Nice! However, I will still create a `Set` in `setHeaderNames()` because `retainAll()` uses `contains()` which is inefficient for a `List`.

Also `this.headerNames = headerNames` would allow the caller to mutate the list afterwards.