final String[] names = {"Eve", "Aaron", "Paul", "Mandy"};

System.out.println("     toString: " + Arrays.toString(names));

Arrays.sort(names);

System.out.println("sort|toString: " + Arrays.toString(names));

Result:

     toString: [Eve, Aaron, Paul, Mandy]
sort|toString: [Aaron, Eve, Mandy, Paul]

Figure 429. Arrays.binarySearch(...) Slide presentation Create comment in forum
final String[] names = {"Aaron", "Eve", "Mandy",  "Paul"};

// Precondition: Array must be ordered!
...println("sort|find(Mand): " + Arrays.binarySearch(names, "Mand"));
...println("sort|find(Mandy): " + Arrays.binarySearch(names, "Mandy"));
...println("sort|find(Mandyer): " + Arrays.binarySearch(names, "Mandyer"));

Result:

sort|find(Mand): -3
sort|find(Mandy): 2
sort|find(Mandyer): -4

exercise No. 136

Understanding search results Create comment in forum

Q:

Read the Javadoc of Arrays.binarySearch(...)and explain the three integer search result values in Figure 429, “Arrays.binarySearch(...).

In particular give a detailed account explaining the two negative values -3 and -4.

A:

The input array reads {"Aaron", "Eva", "Mandy", "Paul"}.

Array element Index
"Aaron" 0
"Eve" 1
"Mandy" 2
"Paul" 3

A positive return value conveys:

  1. The value is present within the array.

  2. The return value is equal to the array element's index.

Searching for "Mandy" thus returns the index value 2 corresponding to the third array element.

Negative return values actually also provide two types of information:

  1. The value is not present in the given array.

  2. The position where the element would be inserted to become part of an ordered list.

In the given example hypothetically inserting the string "Mand" retaining a sorted list results in:

{"Aaron", "Eva", "Mand", "Mandy", "Paul"}

This insertion point's index is 2 corresponding to the third array element. According to the binarySearch(...) method's documentation this corresponds to a return value of -2 - 1 == -3.

The observed return value of -4 when searching for "Mandyer" corresponds to insertion index 3:

{"Aaron", "Eva", "Mandy", "Mandyer", "Paul"}

Subtracting -1 is being required for conveying the «not in list» information under all circumstances. Otherwise not finding and hypothetically inserting e.g. "A" at the list's beginning would result in 0. This could not be disambiguated from an array featuring "A" at its front position.

Figure 430. Arrays.fill(...) Slide presentation Create comment in forum
final String[] names = 
  {"Eve", "Aaron", "Paul", "Mandy"};

System.out.println("toString: " +
   Arrays.toString(names));

Arrays.fill(names, "N.N");

System.out.println("toString: " + 
    Arrays.toString(names));
toString: [Eve, Aaron, Paul, Mandy]
toString: [N.N, N.N, N.N, N.N]

Figure 431. Arrays.copyOfRange(...) Slide presentation Create comment in forum
final String[] names = {"Eve", "Aaron", "Paul", "Mandy"};

final String[] lastTwoNames = Arrays.copyOfRange(names, 2, 6);

System.out.println("toString: " + Arrays.toString(lastTwoNames));

Result:

toString: [Paul, Mandy, null, null]

Figure 432. Arrays.equals(...) Slide presentation Create comment in forum
final String[]
  l1 = {"Eve", "Aaron", "Paul", "Mandy"},
  l2 = {"Eve", "Aaron", "Paul", "Mandy"},
  l3 = {"Eve", "Aaron", "Paul", "Mobile"};

System.out.println("l1.equals(l2):" + Arrays.equals(l1, l2));
System.out.println("l1.equals(l3):" + Arrays.equals(l1, l3));

Result:

l1.equals(l2):true
l1.equals(l3):false