In your case, the main difference between ListView and ScrollView that you should pay particular attention to is how the component renders the child element. ScrollView renders its child elements all at once. ListView has a few additional features that allows you to smoothly scroll down a list of potentially infinite number of elements. Quoting the documentation, here are the performance enhancing features in ListView:
Only re-render changed rows - the rowHasChanged function provided to the data source tells the ListView if it needs to re-render a row because the source data has changed - see ListViewDataSource for more details.
Rate-limited row rendering - By default, only one row is rendered per event-loop (customizable with the pageSize prop). This breaks up the work into smaller chunks to reduce the chance of dropping frames while rendering rows.
Rendering many dynamic data using ScrollView will definitely impact memory usage and performance, because it renders all child components at once and it will re-render components even if the data has not changed. So, if you only can use either of the two in this case, use ListView component.
If you are using RN v >= 0.43, then the best option is to use FlatList component. The main advantage of using this is that it renders your component only when it's needed (lazy loading).
For more in depth explanation, I highly recommend the official RN documentation.