What i think would be the way to do this is to store each of the values of the strings and balance the index against a total of how many times the string occurs, then when you read a new string you look in your list of uniques and if you find a match you up the corresponding total, if no match you add the string to the uniques.
However every value you get is going to increase how long each test will take, one thing I will suggest is no to bother reading the file into an initial array, you will be double handling the values, just do the calculation after each line is read using a simple string as a buffer.
Something like this:
(I say like because I cant compile it at the moment best just to use it as an example)
String strings = new String;
int amount = new int;
FileInputStream fin = new FileInputStream("Recipients");
BufferedReader myInput = new BufferedReader(new InputStreamReader(fin));
int i = 0;
int k = 0;
strings[k] = thisLine;
amount[k] = 1;
Someone else can probably give you a way to link the two arrays (im not not one for linked lists, never really seen thier value) and the amount array will probably have to start with default values of zero im not sure if it does, the way ive set the loop isnt elegant either but it should be enough for a start.