Q:

What's the use of new String[0] in toArray(new String[0]);

hi I have something like this:
saved = getSharedPreferences("searches", MODE_PRIVATE);
String[] mystring = saved.getAll().keySet().toArray(new String[0]);

why do we need the argument new String[0] inside toArray?

A:

So that you get back a String[]. The one without any argument gives back to you an Object[].
See you have 2 versions of this method:

Object[] toArray()
<T> T[] toArray(T[] a)

By passing String[] array, you are using the generic version.

A better way to pass the String[] array would be to initialize it with the size of the Set, and not with size 0, so that there is not need to create a new array in the method:
Set<String> set = saved.getAll().keySet();
String[] mystring = set.toArray(new String[set.size()]);

A:

It's to provide a type for the return and prevent any compile-time ambiguity. 
the signiture for that method call is: <T> T[] toArray(T[] a)
wheras the empty parameter one is Object[] toArray()

