Title: Arrays
1Arrays
2Background
- Programmer often need the ability to represent a
group of values as a list - List may be one-dimensional or multidimensional
- Java provides arrays and the collection classes
- The Vector class is an example of a collection
class - Consider arrays first
3Basic terminology
- List is composed of elements
- Elements in a list have a common name
- The list as a whole is referenced through the
common name - List elements are of the same type the base
type - Elements of a list are referenced by subscripting
(indexing) the common name
4Java array features
- Subscripts are denoted as expressions within
brackets - Base (element) type can be any type
- Size of array can be specified at run time
- This is different that pure C! (for the most
part, at least) - Index type is integer and the index range must be
0 ... n-1 - Where n is the number of elements
- Automatic bounds checking
- Ensures any reference to an array element is
valid - Data field length specifies the number of
elements in the list - Array is an object
- Has features common to all other objects
5Array variable definition styles
int a int a
6Array variable definition styles
7Example
- Definitions
- char c
- int value new int10
- Causes
- Array object variable c is un-initialized
- Array object variable v references a new ten
element list of integers - Each of the integers is default initialized to 0
82004 IOCCC winners
- 2004 winners
- 2004 anonymous Rendering of a stroked font
- 2004 arachnid Curses maze displayer/navigator
with only line-of-sight visibility - 2004 burley A Poker game
- 2004 gavare A ray tracer
- 2004 gavin Mini-OS
- 2004 hibachi A CGI capable HTTP server
- 2004 hoyle Curses based polynomial graphing with
auto-scale - 2004 jdalbec Conway's look'n'say sequence
split into elements - 2004 kopczynski OCR of 8, 9, 10 and 11
- 2004 newbern Renders arbitary bitmapped fonts
- 2004 omoikane A CRC inserter
- 2004 schnitzi Editor animation
- 2004 sds Space/tab/linefeed steganography
- 2004 vik1 X Windows car racing game
- 2004 vik2 Calculates prime numbers using
only CPP - At http//www1.us.ioccc.org/years.html2004
9Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
10Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
11Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
12Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
13Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
14Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
15Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
16Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
8 is displayed
17Consider
- int v new int10
- int i 7
- int j 2
- int k 4
- v0 1
- vi 5
- vj vi 3
- vj1 vi v0
- vvj 12
- System.out.println(v2)
- vk stdin.nextInt()
Suppose 3 is extracted
18Consider
- Segment
- int b new int100
- b-1 0
- b100 0
- Causes
- Array variable to reference a new list of 100
integers - Each element is initialized to 0
- Two exceptions to be thrown
- -1 is not a valid index too small
- 100 is not a valid index too large
- IndexOutOfBoundsException
19Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
20Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
21Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
22Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
23Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
24Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
25Consider
- Point p new Point3
- p0 new Point(0, 0)
- p1 new Point(1, 1)
- p2 new Point(2, 2)
- p0.setX(1)
- p1.setY(p2.getY())
- Point vertex new Point(4,4)
- p1 p0
- p2 vertex
26Explicit initialization
ElementType
id
exp
,
exp
,
...
exp
0
1
-1
n
27Explicit initialization
- Example
- String puppy pika, arlo, shadow",
lucia" - int unit 1
- Equivalent to
- String puppy new String4
- puppy0 pika" puppy1 arlo"
- puppy2 shadow" puppy4 lucia"
- int unit new int1
- unit0 1
28Empty set an example
29Array members
- Member length
- Size of the array
- for (int i 0 i lt puppy.length i)
- System.out.println(puppyi)
-
30Array members
- Member clone()
- Produces a shallow copy
- Point u new Point(0, 0), new Point(1, 1)
- Point v u.clone()
- v1 new Point(4, 30)
31Array members
- Member clone()
- Produces a shallow copy
- Point u new Point(0, 0), new Point(1, 1)
- Point v u.clone()
- v1 new Point(4, 30)
32Array members
- Member clone()
- Produces a shallow copy
- Point u new Point(0, 0), new Point(1, 1)
- Point v u.clone()
- v1 new Point(4, 30)
33Array members
- Member clone()
- Produces a shallow copy
- Point u new Point(0, 0), new Point(1, 1)
- Point v u.clone()
- v1 new Point(4, 30)
34Making a deep copy
- Example
- Point w new Pointu.length
- for (int i 0 i lt u.length i)
- wi (Point) ui.clone()
-
35Making a deep copy
36End of lecture on 10 November 2004
37Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
38Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
39Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
40Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
41Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
42Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
43Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
44Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
45Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
46Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
47Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
48Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
49Searching for a value
- System.out.println("Enter search value (number)
") - int key stdin.nextInt()
- int i
- for (i 0 i lt data.length i)
- if (key datai)
- break
-
-
- if (i ! data.length)
- System.out.println(key " is the " I "-th
element") -
- else
- System.out.println(key " is not in the list")
50Searching for the minimum value
- Segment
- int minimumSoFar sample0
- for (int i 1 i lt sample.length i)
- if (samplei lt minimumSoFar)
- minimumSoFar samplei
-
51ArrayTools.java method sequentialSearch()
- public static int sequentialSearch(int data,
int key) - for (int i 0 i lt data.length i)
- if (datai key)
- return i
-
-
-
- return -1
-
- Consider
- int score 6, 9, 82, 11, 29, 85, 11, 28, 91
- int i1 sequentialSearch(score, 11)
- int i2 sequentialSearch(score, 30)
52ArrayTools.java method putList()
- public static void putList(int data)
- for (int i 0 i lt data.length i)
- System.out.println(datai)
-
-
- Consider
- int score 6, 9, 82, 11, 29, 85, 11, 28, 91
- putList(score)
53- public static int getList()
-
- Scanner stdin new Scanner (System.in)
- int buffer new intMAX_LIST_SIZE
- int listSize 0
- for (int i 0 i lt MAX_LIST_SIZE i)
- String v stdin.nextLine()
- if (v ! null)
- int number Integer.parseInt(v)
- bufferi number
- listSize
-
- else
- break
-
ArrayTools.java method getList()
54ArrayTools.java outline
- In java.util
- public class ArrayTools
- // class constant
- private static final int MAX_LIST_SIZE 1000
- // sequentialSearch() examine unsorted list
for key - public static int binarySearch(int data,
int key) ... - // valueOf() produces a string representation
- public static void putList(int data) ...
- // getList() extract and return up to
MAX_LIST_SIZE values - public static int getList() throws
IOException ... - // reverse() reverses the order of the element
values - public static void reverse(int list) ...
55Demo.java
- import java.io.
- public class Demo
- // main() application entry point
- public static void main(String args) throws
IOException - System.out.println("")
- System.out.println("Enter list of integers")
- int numbers ArrayTools.getList()
- System.out.println("")
- System.out.println("Your list")
- ArrayTools.putList(numbers)
- ArrayTools.reverse(numbers)
- System.out.println("")
- System.out.println("Your list in reverse")
- ArrayTools.putList(numbers)
- System.out.println()
-
56(No Transcript)
57Microsoft and patents
58Sorting
- Problem
- Arranging elements so that they are ordered
according to some desired scheme - Standard is non-decreasing order
- Why don't we say increasing order?
- Major tasks
- Comparisons of elements
- Updates or element movement
59Selection sorting
- Algorithm basis
- On iteration i, a selection sorting method
- Finds the element containing the ith smallest
value of its list v and exchanges that element
with vi - Example iteration 0
- Swaps smallest element with v0
- This results in smallest element being in the
correct place for a sorted result
60Selection sorting
- Algorithm basis
- On iteration i, a selection sorting method
- Finds the element containing the ith smallest
value of its list v and exchanges that element
with vi - Example iteration 0
- Swaps smallest element with v0
- This results in smallest element being in the
correct place for a sorted result
61Selection sorting
- Algorithm basis
- On iteration i, a selection sorting method
- Finds the element containing the ith smallest
value of its list v and exchanges that element
with vi - Example iteration 1
- Swaps second smallest element with v1
- This results in second smallest element being in
the correct place for a sorted result
62Selection sorting
- Algorithm basis
- On iteration i, a selection sorting method
- Finds the element containing the ith smallest
value of its list v and exchanges that element
with vi - Example iteration 1
- Swaps second smallest element with v1
- This results in second smallest element being in
the correct place for a sorted result
63ArrayTools.java selection sorting
- public static void selectionSort(char v)
- for (int i 0 i lt v.length-1 i)
- // find the location of the ith smallest
element - int spot i
- for (int j i1 j lt v.length j)
- if (vj lt vspot) // is current location
ok? - // update spot to index of smaller
element - spot j
-
-
- // spot is now correct, so swap elements
- char rmbr vi
- vi vspot
- vspot rmbr
-
64Iteration i
- // find the location of the ith smallest element
- int spot i
- for (int j i1 j lt v.length j)
- if (vj lt vspot) // is spot ok?
- // update spot with index of smaller element
- spot j
-
- // spot is now correct, swap elements vspot and
v0
65Multidimensional arrays
- Many problems require information be organized as
a two-dimensional or multidimensional list - Examples
- Matrices
- Graphical animation
- Economic forecast models
- Map representation
- Time studies of population change
- Microprocessor design
66Example
- Segment
- int m new int3
- m0 new int4
- m1 new int4
- m2 new int4
- Produces
When an array is created, each value is
initialized!
67Example
- Alternative
- int m new int34
- Produces
68Multidimensional array visualization
- A multi-dimensional array declaration (either
one) - int m new int34
- Produces
0
0
0
0
0
0
0
0
0
0
0
0
or
0
0
0
0
0
0
0
0
0
0
0
0
69End of lecture on 15 November 2004
70Example
- Segment
- for (int r 0 r lt m.length r)
- for (int c 0 c lt mr.length c)
- System.out.print("Enter a value ")
- mrc stdin.nextInt()
-
71Example
- Segment
- String s new String4
- s0 new String2
- s1 new String2
- s2 new String4
- s3 new String3
- Produces
72Multidimensional array visualization
- Segment
- String s new String4
- s0 new String2
- s1 new String2
- s2 new String4
- s3 new String3
- Produces
- Called a ragged array
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
or
0
0
0
0
0
0
73Example
- Segment
- int c 1, 2, 3, 4, 5, 6, 7, 8, 9
- Produces
74Matrices
- A two-dimensional array is sometimes known as a
matrix because it resembles that mathematical
concept - A matrix a with m rows and n columns is
represented mathematically in the following
manner
75Matrix addition
- Definition C A B
- cij aij bij
- cij is sum of the elements in the same row and
column of A and B
76Matrix addition
- public static double add(double a,
double b) - // determine number of rows in solution
- int m a.length
- // determine number of columns in solution
- int n a0.length
- // create the array to hold the sum
- double c new doublemn
- // compute the matrix sum row by row
- for (int i 0 i lt m i)
- // produce the current row
- for (int j 0 j lt n j)
- cij aij bij
-
-
77Todays dose of demotivators