Technically you can create all your lists and fill them with the number of items you will fill into them, but you can fill them with junk and then just override the values.
But, you should not invest too much effort into optimizing a code that's not (yet) having performance issues. You should implement your program in the most natural way and make sure it works. Measure the time. Do stress tests. If you have a performance issue, then you will have far more information about the issue when you have it than beforehand, when you plan your code. You may try to optimize a problem that would never exist anyways.
So, if you are worried about your method's performance, then you should also implement the "creation" and "addition" to the sublist that you are to return. At first, you can implement the creation as a new
List
and the addition as a call to the .Add()
method. Later on, if you end up having performance issues, then you will change these methods so, the "creation" will just return the already created list and the "addition" will just change the value at an index.