Here's The Conversation with names and plain arrays: 

import java.util.*;

class One {
  public static void main(String[] args) {
    Scanner maggie = new Scanner(System.in);
    System.out.print("Name: ");
    String name = maggie.nextLine();
    String[] memory = new String[0];
    while (! name.equals("bye")) {
      memory = Arrays.copyOf( memory , memory.length + 1 );
      memory[memory.length - 1] = name;
      System.out.println( Arrays.toString ( memory ) );
      System.out.print("Name: ");
      name = maggie.nextLine();
    }
    Arrays.sort( memory );
    System.out.println( Arrays.toString ( memory ) );

  }
}

Here's the same with ArrayList of Strings: 

import java.util.*;

class Two {
  public static void main(String[] args) {
    Scanner maggie = new Scanner(System.in);
    System.out.print("Name: ");
    String name = maggie.nextLine();
    ArrayList<String> memory = new ArrayList<String>();
    while (! name.equals("bye")) {
      memory.add( name );
      System.out.println( memory );
      System.out.print("Name: ");
      name = maggie.nextLine();
    }
  }
}

Here's how we create a two dimensional structure with ArrayLists: 

Welcome to DrJava.  Working directory is C:\Users\dgerman\Desktop
> import java.util.*;
> ArrayList<String> teamOne = new ArrayList<String>();
> ArrayList<String> teamThree = new ArrayList<String>();
> ArrayList<String> teamTwo = new ArrayList<String>();
> teamOne
[]
> teamOne.add("Joe")
true
> teamOne.add("Harrison")
true
> teamOne
[Joe, Harrison]
> teamTwo.add("Mike")
true
> teamTwo.add("Sam")
true
> teamThree.add("Sam")
true
> teamThree.add("Stanley")
true
> teamThree.add("Leslie")
true
> teamOne
[Joe, Harrison]
> teamTwo
[Mike, Sam]
> teamThree
[Sam, Stanley, Leslie]
> ArrayList<ArrayList<String>> teams = new ArrayList<ArrayList<String>>()
> teams.add(teamOne)
true
> teams
[[Joe, Harrison]]
> teams.add(teamTwo)
true
> teams.add(teamThree)
true
> teams
[[Joe, Harrison], [Mike, Sam], [Sam, Stanley, Leslie]]
>