# ArrayList Tutorial

## SET08112 ArrayList Interface Tutorial

In this tutorial you will use the ArrayList and the HashMap or TreeMap to solve some common problems. You will use methods such as:

• java.util.Collections.sort
• get

## Problem 1 - Sort a List

The file from http://progzoo.net/students.txt contains a list of students:

```Whitaker, Forest
Winslet, Kate
De Havilland, Olivia
Donat, Robert
Douglas, Michael
Dressler, Marie
...
```

Create a programme SortStudents.java that reads in this file and outputs the students in Alphabetical order.

• You can use an ArrayList to hold the students.
• ArrayList<String> names = new ArrayList<String>();
• You can use java.util.Collections.sort to sort the ArrayList

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 2 - List Routes

The file http://progzoo.net/year1.txt contains a list of all students in year one. Each line contains the name of the student and the name of the route (programme) they follow separated by a tab.

```Brando, Marlon 	BSC (HONS) DIGITAL MEDIA F/T
Bridges, Jeff 	BSC (HONS) INTERACTIVE MEDIA DESIGN F/T
Brody, Adrien 	BENG (HONS) COMPUTER SECURITY AND FORENSICS F/T
```

Write a program to read in this file and output a list of routes with no duplicates. You can use a program very similar to the one above – but this time:

• Use `line.split("\t")` to get the route
• Use `name.contains(st[1])` to add the route only if it is not already in the ArrayList
• You do not need to sort before output

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 3 - Who's missing?

The file http://progzoo.net/present.txt contains those students from students.txt who attended a particular tutorial. We want a list of all those students who were not present.

```Brody, Adrien
Irons, Jeremy
Spacek, Sissy
```

How to do this…

• Create an array list called present
• Open the file present.txt and add every line to the ArrayList present
• Open the file students.txt
• For each line in the file – if that student is not in present print the name.
```if (!present.contains(line)) System.out.println(line);
```

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 4 - Count Routes

Use the file year1.txt to print a list of all the routes in alphabetical order. We also want a count of how many students are in each route.

```BENG (HONS) COMPUTER NETWORKS AND DISTRIBUTED SYSTEMS F/T	10
BENG (HONS) COMPUTER SECURITY AND FORENSICS F/T	28
BENG (HONS) COMPUTING F/T	22
BENG (HONS) EMBEDDED COMPUTER SYSTEMS F/T	1
...
```

How to do this:

• See the section “Use Map to aggregate” from the lecture
• Use the HashMap structure to map String to Integer, the String will be the route name, the Integer will be the number of students
• HashMap supports methods put and get
• You can use two passes to process get the answer.
• On the first pass run over the list and put the value 0 against every route you encounter.
• On the second pass use put to add 1 to each route you encounter.
• It is better to use a single pass:
• For each route if the key exists then +1 of the value, if the key does not exist then put 1.

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 5 – Use Map to count regions

Read in the file http://progzoo.net/bbc.txt and output a list of region and the number of countries in each. This problem is just like the previous problem. If you use a TreeMap in place of a hash map then the output will be in order.

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 6 – Use Map to find associates

Read in the file bbc.txt and output a list of countries by region. One way to do this is to build up a list of countries for each region. To do that you could use a structure such as:

```TreeMap<String,ArrayList<String>> region
= new TreeMap<String,ArrayList<String>>();
```

[Font] [Default] [Show] [Resize] [History] [Profile]

## Problem 7 - Process Log Files

A single line from the log file of sqlzoo.net http://progzoo.net/access_log looks like this:

```98.100.11.98 - - [26/Jan/2010:17:34:09 +0000] "GET /3.htm HTTP/1.1" 200 32441 "http://www.sqlzoo.net/3a.htm" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2; MS-RTC LM 8)"
```

Fields are separated by spaces. This line represents one “hit”

 98.100.11.98 is the ip address of the visitor - - means they were not authenticated 26/Jan/2010:17:34:09 +0000 Date and time according to my server /3.htm is the address of the web page visited (full address is http://sqlzoo.net/3.htm) 200 means the request was successful (404 is not found, 500 is server error) 32441 is the size of the page http://www.sqlzoo.net/3a.htm is the referrer – where the incoming link is coming from Mozilla/4.0 (compatible; MSIE 8.0; Windows… Identifies the operating system and browser

Questions - these cannot be answered on progzoo - they take too long

• Give the ip addresses of the top three users?
• What are the three most popular pages?
• Who are my 10 best referrers (don’t count sqlzoo references)?
• What proportion of my traffic is robotic? List all the robots and the number of hits. You should assume that all robots visit robot.txt and no humans visit that page.