ArrayLists - UNSW Engineering
Transcript of ArrayLists - UNSW Engineering
![Page 1: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/1.jpg)
ArrayListsCOMP1400 Week 8
Wednesday, 12 September 12
![Page 2: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/2.jpg)
Working with arraysThere are a number of common actions we want to do with arrays:
• adding and deleting
• copying
• looking for a particular element
• counting the elements
Wednesday, 12 September 12
![Page 3: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/3.jpg)
ArraysArrays are intrinsically fixed-length storage.
Adding or deleting elements from arrays is cumbersome:
• create a new larger/smaller array
• copy the unaffected elements
• add/remove the affected element
Wednesday, 12 September 12
![Page 4: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/4.jpg)
AbstractionRather than rewriting methods that perform these actions every time we use an array, we should abstract them into a new object.
What we want is a new class that implements a variable-length list.
The public interface should provide methods to implement the actions listed above.
Wednesday, 12 September 12
![Page 5: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/5.jpg)
ArrayListThe ArrayList class in the Java Class Library provides this capability.
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html
Wednesday, 12 September 12
![Page 6: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/6.jpg)
EncapsulationThe ArrayList class abstracts and encapsulates all the methods for implementing a variable-length list using fixed-length arrays.
ArrayList<String> private String[] myList; public void add(String s); public String get(int pos);
Wednesday, 12 September 12
![Page 7: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/7.jpg)
Generic classesEach ArrayList holds a specific type (or class) of object.
This class is given as a type parameter in angle brackets <> after the name.
The type of the methods get, set and add depend on the given type.
Parameterised types are called generic classes.
Wednesday, 12 September 12
![Page 8: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/8.jpg)
Type parametersWhen we create a variable that holds an ArrayList we also need to provide the type of objects it contains:
ArrayList<String> listOfStrings;
ArrayList<Integer> listOfInts;
ArrayList<Book> listOfBooks;
These are called the type parameters.
Wednesday, 12 September 12
![Page 9: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/9.jpg)
Type parametersWhen we create a variable that holds an ArrayList we also need to provide the type of objects it contains:
ArrayList<String> listOfStrings;
ArrayList<Integer> listOfInts;
ArrayList<Book> listOfBooks;
These are called the type parameters.
collection class
Wednesday, 12 September 12
![Page 10: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/10.jpg)
Type parametersWhen we create a variable that holds an ArrayList we also need to provide the type of objects it contains:
ArrayList<String> listOfStrings;
ArrayList<Integer> listOfInts;
ArrayList<Book> listOfBooks;
These are called the type parameters.
collection class
itemclass
Wednesday, 12 September 12
![Page 11: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/11.jpg)
Type parametersWhen we create a variable that holds an ArrayList we also need to provide the type of objects it contains:
ArrayList<String> listOfStrings;
ArrayList<Integer> listOfInts;
ArrayList<Book> listOfBooks;
These are called the type parameters.
collection class
itemclass
anglebrackets
Wednesday, 12 September 12
![Page 12: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/12.jpg)
List of Strings ArrayList<String> classRoll = new ArrayList<String>();
classRoll.add("Sim Mautner");
String who = classRoll.get(0);
// who is now “Sim Mautner”
Wednesday, 12 September 12
![Page 13: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/13.jpg)
List of intsThis does not work:
ArrayList<int> scores = new ArrayList<int>();
scores.add(1);
int s = scores.get(0);
The type parameter must be a class not a primitive type.
Wednesday, 12 September 12
![Page 14: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/14.jpg)
List of intsInstead we use:
ArrayList<Integer> scores = new ArrayList<Integer>();
scores.add(1);
int s = scores.get(0);
The Integer class is an object-wrapper for the primitive type int.
Wednesday, 12 September 12
![Page 15: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/15.jpg)
Wrapper ClassesJava implements wrapper classes to convert primitive types into objects automatically.
Integer intObject = 1;
Double doubleObject = 2.0;
Boolean boolObject = true;
Character charObject = ‘x’;
Wednesday, 12 September 12
![Page 16: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/16.jpg)
Importing
Since ArrayLists are part of the JCL, we must first import them before use:
import java.util.ArrayList;
Wednesday, 12 September 12
![Page 17: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/17.jpg)
ConstructionTo construct an ArrayList we will usually use the simple no-parameter constructor:
// create an empty list
ArrayList<String> classRoll = new ArrayList<String>();
There are two other constructors but we won’t be using them much.
size
0
Wednesday, 12 September 12
![Page 18: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/18.jpg)
Adding itemsA newly constructed list is empty.
We can add items using the add method.
classRoll.add("Malcolm"); classRoll.add("Claude");
The type of objects we add must match the type parameter.
classRoll.add(47); // ERROR
size 0 1
2
“Malcolm”
“Claude”
Wednesday, 12 September 12
![Page 19: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/19.jpg)
Adding duplicatesWe can add something to a list more than once.
classRoll.add("Malcolm"); classRoll.add("Malcolm"); size
0 1 2 3
4
“Malcolm”
“Claude”
“Malcolm”
“Malcolm”
Wednesday, 12 September 12
![Page 20: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/20.jpg)
SizeWe can use the size method to access the number of objects on the list:
int nStudents = classRoll.size();
// nStudents == 2
classRoll.add("Sim");
nStudents = classRoll.size();
// nStudents == 3
size 0 1
2
“Malcolm”
“Claude”
Wednesday, 12 September 12
![Page 21: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/21.jpg)
SizeWe can use the size method to access the number of objects on the list:
int nStudents = classRoll.size();
// nStudents == 2
classRoll.add("Sim");
nStudents = classRoll.size();
// nStudents == 3
size 0 1
2
“Malcolm”
“Claude”
size 0 1 2
3
“Malcolm”
“Claude”
“Sim”
Wednesday, 12 September 12
![Page 22: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/22.jpg)
GetWe can access elements on the list by their index using the get method.
String me = classRoll.get(0);
// me == "Malcolm"
String him = classRoll.get(1);
// him == "Claude"
Wednesday, 12 September 12
![Page 23: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/23.jpg)
IndexingNote that the indices always start from 0 and end at size-1.
classRoll.size(); // returns 3 classRoll.get(0); // returns "Malcolm" classRoll.get(2); // returns "Sim" classRoll.get(3); // ERROR
size 0 1 2
3
“Malcolm”
“Claude”
“Sim”
Wednesday, 12 September 12
![Page 24: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/24.jpg)
RemoveWe can use the remove method to remove the element at a given index.
The other elements get renumbered.
classRoll.remove(1);
classRoll.size(); // returns 2
classRoll.get(1); // "Sim"
size 0 1 2
3
“Malcolm”
“Claude”
“Sim”
Wednesday, 12 September 12
![Page 25: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/25.jpg)
RemoveWe can use the remove method to remove the element at a given index.
The other elements get renumbered.
classRoll.remove(1);
classRoll.size(); // returns 2
classRoll.get(1); // "Sim"
size 0 1
2
“Malcolm”
“Sim”
Wednesday, 12 September 12
![Page 26: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/26.jpg)
CopyingThere is a special constructor for creating a copy of a list:
ArrayList<String> copy = new ArrayList<String>( classRoll);
copy.add("Troy");
3
“Malcolm”
“Claude”
size 0 1
2
“Malcolm”
“Sim”
Wednesday, 12 September 12
![Page 27: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/27.jpg)
CopyingThere is a special constructor for creating a copy of a list:
ArrayList<String> copy = new ArrayList<String>( classRoll);
copy.add("Troy");
3
“Malcolm”
“Claude”
size 0 1
2
“Malcolm”
“Sim”
size 0 1
2
“Malcolm”
“Sim”
Wednesday, 12 September 12
![Page 28: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/28.jpg)
CopyingThere is a special constructor for creating a copy of a list:
ArrayList<String> copy = new ArrayList<String>( classRoll);
copy.add("Troy");
3
“Malcolm”
“Claude”
size 0 1
2
“Malcolm”
“Sim”
size 0 1 2
3
“Malcolm”
“Sim”
“Troy”
Wednesday, 12 September 12
![Page 29: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/29.jpg)
Other methodsThere are other methods you can read about in the API documentation:
• clear - remove all elements
• set - set value of a given element
• insert - insert an element at an index
• contains - test if an element is on the list
Wednesday, 12 September 12
![Page 30: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/30.jpg)
For-each loopA for-each loop is used to iterate over all the elements of a collection:
for (String who : classRoll) {
// action performed on // each element
System.out.println(who);
}
Wednesday, 12 September 12
![Page 31: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/31.jpg)
For-each loopA for-each loop is used to iterate over all the elements of a collection:
for (String who : classRoll) {
// action performed on // each element
System.out.println(who);
}
element type
Wednesday, 12 September 12
![Page 32: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/32.jpg)
For-each loopA for-each loop is used to iterate over all the elements of a collection:
for (String who : classRoll) {
// action performed on // each element
System.out.println(who);
}
element type
element variable
Wednesday, 12 September 12
![Page 33: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/33.jpg)
For-each loopA for-each loop is used to iterate over all the elements of a collection:
for (String who : classRoll) {
// action performed on // each element
System.out.println(who);
}
element type
element variable
list variable
Wednesday, 12 September 12
![Page 34: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/34.jpg)
Arrays vs ArrayLists// declaring array variables
String[] arrayOfStrings;int[] arrayOfInts;
// declaring list variables
ArrayList<String> listOfStrings;ArrayList<Integer> listOfInts;
Wednesday, 12 September 12
![Page 35: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/35.jpg)
Arrays vs ArrayLists// constructing arrays
arrayOfStrings = new String[5]arrayOfInts = new int[10]
// constructing lists (empty)
listOfStrings = new ArrayList<String>();listOfInts = new ArrayList<Integer>();
Wednesday, 12 September 12
![Page 36: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/36.jpg)
Arrays vs ArrayLists// measuring size
int arraySize = arrayOfStrings.length;
int listSize = listOfStrings.size();
Wednesday, 12 September 12
![Page 37: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/37.jpg)
Arrays vs ArrayLists// getting elements
String s1 = arrayOfStrings[2];int i1 = arrayOfInts[1];
String s2 = listOfStrings.get(2);int i2 = listOfInts.get(1);
Wednesday, 12 September 12
![Page 38: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/38.jpg)
Arrays vs ArrayLists// setting elements
arrayOfStrings[2] = "Malcolm";arrayOfInts[1] = 40;
listOfStrings.set(2, "Malcolm");listOfInts.set(1, 40);
Wednesday, 12 September 12
![Page 39: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/39.jpg)
Arrays vs ArrayLists// iterating
for (int i = 0; i < arrayOfStrings.length; i++) {
// process arrayOfStrings[i]
}
foreach (String s : listOfStrings) {
// process s
}
Wednesday, 12 September 12
![Page 40: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/40.jpg)
Arrays vs ArrayLists// Copying
String[] copyArray = new String[arrayOfStrings.length+1];for (int i = 0; i < arrayOfStrings.length; i++) { copyArray[i] = arrayOfStrings[i];}
ArrayList<String> copyList = new ArrayList<String>(listOfStrings);
Wednesday, 12 September 12
![Page 41: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/41.jpg)
Arrays vs ArrayLists// Adding an element
String[] copyArray = new String[arrayOfStrings.length+1];for (int i = 0; i < arrayOfStrings.length; i++) { copyArray[i] = arrayOfStrings[i];}copy[arrayOfStrings.length] = value;arrayOfStrings = copyArray;
listOfStrings.add(value);
Wednesday, 12 September 12
![Page 42: ArrayLists - UNSW Engineering](https://reader033.fdocuments.in/reader033/viewer/2022050218/626ea28f1bb2350b1448efad/html5/thumbnails/42.jpg)
Other collectionsSets (unordered, no duplicates):
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashSet.html
Maps (look-up tables with key/value pairs):
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html
Wednesday, 12 September 12