Arrays, ArrayLists,
Wrapper Classes, Auto-boxing
Check out ArraysAndLists from SVN
Test next Wednesday
Topics from Ch. 1-7
Will include:
◦ A paper part—logic, short answer, fill-in-the-blank
◦ A programming part—a few small programs, unit
tests provided
Review in class Monday
◦ Bring questions
◦ I won’t anything prepared but am happy to cover
whatever you want, including working examples
Q1
Syntax: ElementType[] name
Examples:
◦ A variable: double[] averages;
◦ Parameters: public int max(int[] values) {…}
◦ A field: private Investment[] mutualFunds;
Syntax: new ElementType[length]
Creates space to hold values
Sets values to defaults
◦ 0 for number types
◦ false for boolean type Don’t forget
◦ null for object types this step!
Examples:
◦ double[] pools = new double[50];
◦ int[] elecVotes = new int[50];
Q2
Reading:
◦ double exp = polls[42] * elecVotes[42];
Reads the element
Sets the value
in slot 37. with index 42.
Writing:
◦ elecVotes[37] = 11;
Index numbers run from 0 to array length – 1
Getting array length: elecVotes.length
No parens, array length
is (like) a field Q3,4
Arrays… Java C Python
have fixed length yes yes no
are initialized to default yes no ?
values
track their own length yes no yes
trying to access ―out of yes no yes
bounds‖ stops program
before worse things happen
Begin ElectionSimulator
program
ArrayLists to the rescue
Example:
Element type
◦ ArrayList<State> sts = new ArrayList<State>();
Variable type Constructs new,
Adds new element empty list
to end of list
sts.add(new State(“Indiana”, 11, .484, .497));
ArrayList is a generic class
◦ Type in <brackets> is called a type parameter
Q5,6
Type parameter can’t be a primitive type
◦ Not: ArrayList<int> runs;
◦ But: ArrayList<Integer> runs;
Use get method to read elements
◦ Not: runs[12]
◦ But: runs.get(12)
Use size() not length
◦ Not: runs.length
◦ But: runs.size()
Add to end:
◦ victories.add(new WorldSeries(2008));
Overwrite existing element:
◦ victories.set(0,new WorldSeries(1907));
Insert in the middle:
◦ victories.add(1, new WorldSeries(1908));
◦ Pushes elements at indexes 2 and higher up one
Can also remove:
◦ victories.remove(victories.size() - 1)
Convert ElectionSimulator to
use ArrayLists
IT’S ALL REAL!
Problem:
Primitive Wrapper
◦ ArrayLists only hold objects
byte Byte
◦ Primitive types arent’ objects
boolean Boolean
char Character
Solution: double Double
◦ Wrapper classes—instances are float Float
used to ―turn‖ primitive types int Integer
into objects long Long
◦ Primitive value is stored in a short Short
field inside the object
Q7
Auto-boxing: automatically enclosing a
primitive type in a wrapper object when
needed
Example:
◦ You write: Integer m = 6;
◦ Java does: Integer m = new Integer(6);
◦ You write: Integer ans= m * 7;
◦ Java does: int temp = m.intValue() * 7;
Integer ans = new Integer(temp);
Just have to remember to use wrapper class
for list element type
Example:
◦ ArrayList<Integer> runs =
new ArrayList<Integer>();
runs.add(9); // 9 is auto-boxed
◦ int r = runs.get(0); // result is unboxed
Old school
double scores[] = …
double sum = 0.0;
for (int i=0; i < scores.length; i++) {
sum += scores[i];
}
New, whiz-bang, enhanced for loop
double scores[] = …
double sum = 0.0; No index
for (double sc : scores) { variable
sum += sc; Gives a name
} (sc here) to
Say ―in‖ each element
ArrayList<State> states = …
int total = 0;
for (State st : states) {
total += st.getElectoralVotes();
}
Q8
Finish ElectionSimulator