|
home—info—archive—exams—lectures—labs—hws
Recipe—Laws—lies—syntax—java.lang docs—java.util docs
reminder: Sometimes people confuse the variable referring to the list, with the loop-variable which refers to an element of the list. They are very different!
You don't confuse an apple with a bag-of-apples; you don't confuse a bus-passenger with a bus; so similarly don't confuse an item with a collection-of-items.
In practice, lists prove much more flexible than arrays: it's much more common to have data of the form “0 or more data” than “exactly 100 data”.2
action | Lists | arrays |
The type | java.util.LinkedList<Double> | double[] |
constructor | new double[50]; | |
add-at-end | myList.add( 23.4 ); | — |
access ith element | myList.get(i) | myArray[i] |
change ith element | myList.set(i,23.4) | myArray[i] = 23.4 |
increment ith element (useful only when the collection holds numbers) |
myList.set(i, myList.get(i)+1 ) | myArray[i] = myArray[i] + 1 or myArray[i] += 1 or ++myArray[i] |
determine the size/length | myList.size() | myArray.length |
convert to String | myList.toString() | java.util.Arrays.toString(myArray) |
Can hold primitive types? | no | yes |
BlueJ has a rich interface for interacting with Java programs: you can call any method of any class. Most IDEs have a much more limited interface: They let you choose a certain class, but then you can only call one specific (static) method of that class:
/** * Write a description of class Acronym here. * * @author (your name) * @version (a version number or a date) */ public class Acronym { /** A test driver which makes an acronym from its input, * printing the results to SYstem.out. * @param args The words of input. Each String must be non-empty (and non-null). */ public static void main( String[] args ) { System.out.println( "A " + args.length + "-letter acronym for " + Acronym.wordsToString( args, " ", "\"", "\"" ) + " is " + "\"" + Acronym.acronym(args) + "\"" + "." ); } /* Return a single string, concatenating each word in an array of Strings. * @param words the individual Strings. * @param between What to put in between each word; usually " " or ", ". * @param before What to start the answer with; often "". * @param after What to finish the answer with; often "". */ public static String wordsToString( String[] words, String between, String before, String after ) { String innards = ""; if (words.length > 0) { innards += words[0]; } for ( int i=1; i < words.length; ++i ) { innards += between + words[i]; } return before + innards + after; } /** Return an acronym for an array-of-words, each letter capitalized. * and separated by a ".". * @param words An array of single words. Each String must be non-empty. * @return an acronym for an array-of-words, each letter capitalized. */ public static String acronym( String[] words ) { String asf = ""; // "acronym so far" for ( int i=0; i < words.length; ++i ) { asf += words[i].toUpperCase().charAt(0) + "."; } return asf; } } |
java Acronym hello, world |
Why a new data structure, if a List can already do everything an array can, and yet the array is limited to a fixed size?
class Motel { String name; String address; int numRooms = 57; Room[] rooms = new Room[this.numRooms]; //... } |
double[] temps = new double[31]; /* Here, have code which initializes all 31 elements of the array */ temps[5] // Knowing that the high occured on Jan.06 is part of the data. |
If a list is a line-up bag of suspects (er, objects), then an array is a bus of objects.
When creating an array, initialize all the fields immediately. If you can't, that's a good indication that you want to use a List instead.
(Note that when you add into the middle of a list, it changes what index each later object has. With an array, you can't add into the middle, so that isn't an issue. You can only overwrite the existing contents of a particular bus-seat-#.)
Processing arrays: for-loops are very natural. Also, for-each loops still work, and are perfect when you don't need the index-number to process the element.double[] data; data = new double[500]; java.util.Random r = new java.util.Random(); // Initialize array contents with random numbers in [0,1). for (int i = 0; i < double.length; ++i ) { data[i] = r.nextDouble(); } // Find the average: double sumSoFar = 0.0; for ( double d : data ) { sumSoFar += d; } double average = sumSoFar / data.length; // N.B. if data.length is 0, then floating-division gives Double.NaN. |
1 Usually, in Java, you can extend classes to give them additional behavior. However, in Java, you can't extend array classes, so this class was kludged on. ↩
2 And when using a list, there are two common choices: LinkedList<Type> and ArrayList<Type>. Nearly always, ArrayList<Type> is the better choice. Despite its name, ArrayList is not an array; it's a list. ↩
home—info—archive—exams—lectures—labs—hws
Recipe—Laws—lies—syntax—java.lang docs—java.util docs
©2008, Ian Barland, Radford University Last modified 2008.Apr.14 (Mon) |
Please mail any suggestions (incl. typos, broken links) to ibarlandradford.edu |