Purpose : Array.length gives us storage initialized to array. But wanted to find out count of non-null elements stored in array out of total storage initialized. I know many approaches are possible but here question is related to approach which I used.
Since ArrayList has a size() method which gives us count of actual elements stored regardless of total storage initialized.
So, I thought of converting array to ArrayList and finding out the size. Hence I used Arrays.asList(a).size() as shown below:
public class Driver {
public static void main(String []args)
{
int a[] = new int[10];
a[0]=30;
a[1]=100;
a[2]=33;
System.out.println((Arrays.asList(a)).size() );
}
Strangely , it returns result as 1 regardless of the a[0], a[1], a[2].
Same steps if we do with ArrayList instead of Array gives us result 3:
{
List<Integer> temp = new ArrayList<Integer>(20);
System.out.println(temp.size());
temp.add(20);
temp.add(40);
System.out.println(temp.size());
}
Result is 0 2.
Question: Should be agree that something is wrong with asList API of Arrays utitlity like bug or limitation?
Remarks:
Looking at internal implementation, I understand that asList invokes constructor of ArrayList:
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
size = elementData.length;
.....
}
It again invokes the collection's toArray. But then not sure why we are getting answer as 1 since elementData.length should have stored in size value 10?

