When you are using the second approach you are initializing arraylist with its predefined values.
Like generally we do
ArrayList<String> listofStrings = new ArrayList<>();
Let's say you have an array with values, now you want to convert this array into arraylist.
you need to first get the list from the array using Arrays utils.
Because the ArrayList is concrete type that implements List interface. It is not guaranteed that method asList, will return this type of implementation.
List<String> listofOptions = (List<String>) Arrays.asList(options);
then you can use the constructor of an arraylist to instantiate with predefined values.
ArrayList<String> arrlistofOptions = new ArrayList<String>(list);
So your second approach is working that you have passed values which will instantiate arraylist with the list elements.
Moreover
ArrayList that is returned from Arrays.asList is not an actual arraylist, it is just a wrapper that doesn't allow any modification in the list.
If you try to add or remove over Arrays.asList it will give you
UnsupportedOperationException