# ARRAYS CITS1001 2 Scope of this lecture Arrays

ARRAYS CITS1001 2 Scope of this lecture Arrays Declaring and constructing arrays Using and returning arrays Aliasing 3 Fixed-size collections ArrayList is used when the size of a collection

is not known in advance But in some situations the maximum collection size can be pre-determined For this situation, a special fixed-size collection type is available: the array Arrays can store object references or primitive values Arrays use a special syntax 4 Uses of arrays Arrays are used when we have large numbers of same-typed values or objects that we want to operate on as a collection A collection of temperatures that we want to average A collection of student marks that we want to analyse A collection of names that we want to sort e.g. Bureau of Meteorology monthly data We know there are twelve months in a year

ALBANY Max 25.1 25.1 24.1 21.5 18.7 16.6 15.7 15.9 17.4 18.8 20.8 23.4 Min 13.5 14.3 13.3 11.6 9.8 8.1 7.4 7.4 7.9 9.0 10.6 12.3 Rain 28 25 29 66 102 104 126 104 81 80 46 24 PERTH AIRPORT Max 31.4 31.7 29.5 25.2 21.4 18.7 17.6 18.3 20.0 22.3 25.4 28.5 Min 16.7 17.4 15.7 12.7 10.2 9.0 8.0 7.9 8.8 10.1 12.4 14.6 Rain 8 14 15 46 108 175 164 117 68

48 25 12 5 Arrays An array is an indexed sequence of variables of the same type a a[0] a[1] a[2] a[3] a[4] a[5] The array is called a Its elements are called a[0], a[1], a[2], etc. Each element is a separate variable Notice that (as with ArrayList) indexing starts from 0

6 Declaring arrays An array is declared using similar syntax to any other variable int[] a; Declares a to be a variable representing an array of ints double[] temps; Declares temps to be a variable representing an array of doubles String[] names; Declares names to be a variable representing an array of Strings Student[] marks; Declares marks to be a variable representing an array of Student objects 7 Creating Arrays I

An array is an object in a Java program Therefore the declaration simply creates a reference to point to the array, but does not create the array itself Hence the declaration int[] a; creates a space called a, big enough to hold an object reference, and initially set to the special value null null a The Thedeclaration declarationcreates creates space spacefor for the

thearray array reference, reference, but but not not for for the thearray arrayitself itself 8 Creating Arrays II In order to actually create the array, we must use the keyword new (just like creating any other object) int[] a; a = new int[7];

0 a 0 0 0 0 0 0 An Anobject objectisis created createdon

onthe theheap heapthat that contains contains seven sevenvariables variables of oftype type int int 9 The size of an array The size of an array is determined when the object is created, not when the variable is declared The expression a.length can be used to refer to the size of the array pointed to by a

We will see examples of its use later Note that an array variable can point to different arrays at different times, possibly with different sizes int[] a; a = new int[7]; System.out.println(a.length); a = new int[66]; System.out.println(a.length); 7 66 10 Creating Arrays III The seven variables do not have individual names They are referred to by the array name, and an integer index

0 a[0] 0 a[1] 0 a[2] 0 a[3] 0 a[4] 0 a[5] 0 a[6]

The The indices indicesgo go from from 00to to a.length1 a.length1 a 11 Referencing array elements Array elements can be used in the same ways and in the same contexts as any other variable of that type a[4] = 15; a[2] = 7; a[3] = 2 * a[2] a[4]; a[6] = a[0] + 17;

0 a[0] 0 a[1] 7 -1 15 a[2] a[3] a[4] 0 a[5]

17 a[6] 12 Indexing arrays A lot of the power of arrays comes from the fact that the index can be a variable or an expression int x = 3; a[x] = 5; a[7-x] = a[2*x] * 2 + 10; 0 a[0] 0 a[1] 7

5 44 a[2] a[3] a[4] 0 a[5] 17 a[6] This is especially useful when arrays are manipulated in loops

13 Summing the integers in an array private int sum(int[] a) { int sum = 0; for (int i : a) { sum = sum + i; } return sum; } Here i is an element of the array a 14 Or using a for loop private int sum(int[] a) {

int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i]; } return sum; } Here i is being used as an index into the array a 15 Finding the biggest integer in an array private int max(int[] a) { int max = a[0]; for (int i : a) { if (i > max) max = i; }

return max; } Note that this is only well-defined for non-empty arrays Again i is an element of the array a 16 Or using a for loop private int max(int[] a) { int max = a[0]; for (int i = 1; i < a.length; i++) { if (a[i] > max) max = a[i]; } return max; } Again i is being used as an index into the array a 17

Finding the index of the biggest integer private int max(int[] a) { int k = 0; for (int i = 1; i < a.length; i++) { if (a[i] > a[k]) k = i; } return k; } A for-each loop is more awkward for this example 18 Array literals An array literal is written using {} int[] numbers = {3, 15, 4, 5}; Array literals in this form can

only be used in declarations Related uses require new int[] numbers; numbers = new int[] {3, 15, 4, 5}; declaration, creation, and initialization 19 Returning an array Suppose we want to find the running sums of a e.g. sums({2,5,8,3}) = {2,7,1,2} private int[] sums(int[] a) {

int[] sums = new int[a.length]; sums[0] = a[0]; for (int i = 1; i < a.length; i++) { sums[i] = sums[i1] + a[i]; } return sums; } 20 Returning an array Suppose we want to average each pair of elements in a e.g. avs({2,6,8,2}) = {4,3} private int[] avs(int[] a) { int[] avs = new int[a.length / 2]; for (int i = 0; i < a.length-1; i = i+2) { avs[i/2] = (a[i] + a[i+1]) / 2;

} return avs; } 21 Updating an array Sometimes instead of creating a new array, we want to update the old one private void sums(int[] a) { for (int i = 1; i < a.length; i++) { a[i] = a[i1] + a[i]; } } But this method doesnt return anything 22

Arrays can share memory int[] a, b; a b 23 Arrays can share memory int[] a, b; a = new int[3]; 0 a b 0

0 24 Arrays can share memory int[] a, b; a = new int[3]; b = a; 0 a b 0 0

25 Arrays can share memory int[] a, b; a = new int[3]; b = a; System.out.println(b[2]); 0 0 0 a b 0 26

Arrays can share memory int[] a, b; a = new int[3]; b = a; System.out.println(b[2]); a[2] = 9; 0 0 0 a b 9 27

Arrays can share memory int[] a, b; a = new int[3]; b = a; System.out.println(b[2]); a[2] = 9; System.out.println(b[2]); 0 a b 0 0 9 9

28 Aliasing This is called aliasing Basically one array with two names It applies in the same way with any other object-types too Be careful with equality over arrays In some applications we might want to use aliasing deliberately 29 Changes to parameters are usually lost When we call a method with a parameter of a primitive type, any updates to the parameter are local only The parameter is a new variable private void f(int a) {a = 666;}

int x = 5; System.out.println(x); f(x); System.out.println(x); 5 5 xxisisunchanged unchanged by by ff 30 But arrays are persistent When we call a method with a parameter of object type, the parameter is a new variable but it refers to the same space on the heap private void f(int[] a) {a[0] = 666;}

int[] x = {5,3,1}; System.out.println(x[0]); f(x); System.out.println(x[0]); 5 666 xxisisunchanged unchanged by by ff but but x[0] x[0] isischanged changed

## Recently Viewed Presentations

• VolatileImage objects are cached in the map Upon a display mode switch, the old configuration object get invalidated and will not used again But the images are still maintained Overhead Compile-time analysis Dynamic overhead Sampling rate: 1/15GC, 1/50GC Initial heap...
• It turned out that the chopper was homing in on the emergency locator beacon that activated when the raft was inflated. They are no longer employed at Boeing… TOP 8 IDIOTS OF 2001: Number 3 A true story out of...
• The data is unaudited and may not correspond to calculated performance for any other client or investor in the stated discipline. Neither Mr. Guerard nor McKinley Capital makes any representations or warranties as to the appropriateness or merit of this...
• This photo from 1910 shows a man reclining in a covered cart. His name was Arthur Fuller, and he is wearing a suit with necktie and is eating a meal from a tray across his stomach. ... a doctor demonstrates...
• Kentucky Education Reform Act (KERA) 1990 - 1992 . KERA outlined school responsibilities for achieving specific Learning Goals for ALL Students-- including that schools "shall develop their students' ability to: (2) "Apply core concepts and principles from . . the...
• CBP C-TPAT auditors found the warehouse facilities to be "secure" with appropriate locks, gates and fences. CBP Auditor considered the physical security of the records and not the question of an actual disclosure to a 3rd party.
• So When Do You Reach for a "Reach" School?. If you are close to the lower end of the mid-50%. If you understand the culture and personality of the school. If you are willing to put 100% effort into the...
• Scenes 4-7 Key Focus. Macbeth's psychological angst, confusion and internal conflict: He wants to be king, but doesn't want to be a bad person or do anything bad to achieve it. He wavers between going ahead with Duncan's murder and...