Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Arrays
Programming: The Big Picture
Three fundamental ideas to understand and
use effectively:
flow of control
modular design
iteration/conditionals
subroutines/recursion
data representation
data types/data structures
Data Structures
A data structure is a way of storing data in a
computer so that it can be used efficiently
typically data that is more complex than just a
number or a truth value
The choice of data structure used to store
data can impact the performance of your
program
Data Structures
Given a collection of data:
How do we want to store this?
1, 1, 5, 3, 1, 5, 4, 1, 1
[4*1, 0*2, 1*3, 1*4, 2*5]
{1,3,4,5}
[1,1,5,3,1,5,4,1,1]
Depends on the application
e.g. voting vs. scheduling
(bag)
(set)
(list)
Data Structures
Given a collection of data:
Do we expect more data?
1, 1, 5, 3, 1, 5, 4, 1, 1
more data arriving at the tail?
more data arriving in the middle?
All of these factors together should be
considered in choosing a data representation
Arrays
An array is an ordered list of values
Each value has a numeric index
The entire array
has a single name
0
scores
1
2
3
4
5
6
7
8
9
79 87 94 82 67 98 87 81 74 91
An array of size N is indexed from zero to N-1
This array holds 10 values that are indexed from 0 to 9
Arrays
A particular value in an array is referenced using the
array name followed by the index in brackets
For example, the expression
scores[2]
refers to the value 94 (the 3rd value in the array)
That expression represents a place to store a single
integer and can be used wherever an integer
variable can be used
Arrays
For example, an array element can be
assigned a value, printed, or used in a
calculation:
scores[2] = 89;
scores[first] = scores[first] + 2;
mean = (scores[0] + scores[1])/2;
System.out.println ("Top = " + scores[5]);
Arrays
Limitations:
Array length is fixed when the array is created
Can only hold a single type
so…
Can’t lengthen an array mid-program
Can’t store an int and a String in the same
array
Arrays
The values held in an array are called array
elements
An array stores multiple values of the same type –
the element type
The element type can be a primitive type or an
object reference
arrays of integers, arrays of Strings, arrays of
BankAccounts
In Java, the array itself is an object that must be
instantiated
Declaring Arrays
Use the new syntax
To create a pointer to an array, append a [] to
the element type
String[] names;
int[] scores;
Like other object types, this creates a
reference – not an object
Declaring Arrays
To allocate the memory for the array:
e.g. create an array of 10 ints:
new int[10];
all at once:
int[] scores = new int[10];
Creates this:
scores
Declaring Arrays
Note that the type of the variable scores is
int[]
The array type does not specify its size
An array of integers
The type is not an “array of size 10”
However, every object of type array has a
specified size
Declaring Arrays
Some other examples of array declarations:
float[] prices = new float[500];
boolean[] flags;
flags = new boolean[20];
char[] codes = new char[1750];
Manipulating Array Elements
Some sample array commands:
int[] myArray = new int[100];
myArray[0] = 2;
myArray[4] = myArray[0] + 1;
System.out.println(myArray[4]);
\\ prints 3
myArray[99] = 2; \\ ok
myArray[100] = 2; \\ error
Bound Checking
Array of size N has indices 0,…,N-1
Referencing an element with an index larger
than N-1 results in an
“ArrayIndexOutOfBoundsException”
This is called automatic bounds checking
Bounds Checking
It’s common to produce one-off errors:
int[] codes = new int[100];
for (int index=0; index <= 100; index++)
codes[index] = index*50 + epsilon;
Solution: use the public length constant and
the strictly less than relation
The length Constant
Each array object has a public constant
called length that holds the number of
elements
note: not the highest index
It is referenced with the array name:
e.g. codes.length
So this is a safer loop:
for (int index=0; index < codes.length; index++)
codes[index] = index*50 + epsilon;
The Iterator for Loop
Can also use the “iterator version” of the for
loop:
for (int score : scores)
System.out.println (score);
This is only appropriate when processing all
array elements from top (lowest index) to
bottom (highest index)
Alternate Array Syntax
The brackets of the array type can be associated
with the element type or with the name of the array
Therefore the following two declarations are
equivalent:
float[] prices;
float prices[];
The first format generally is more readable and
should be used
Initializer Lists
An initializer list can be used to instantiate
and fill an array in one step
The values are delimited by braces and
separated by commas:
int[] units = {147, 323, 89, 933, 540,
269, 97, 114, 298, 476};
char[] letterGrades = {'A', 'B', 'C', 'D', ’F'};
Initializer Lists
Note that when an initializer list is used:
the new operator is not used
no size value is specified
The size of the array is determined by the
number of items in the initializer list
An initializer list can be used only in the array
declaration
Arrays as Parameters
An entire array can be passed as a
parameter
Example: the main method takes an
argument of type String[]
This array is obtained from command-line
arguments
Command Line Arguments
public class CommandLineTest
{
public static void main (String[] args)
{
System.out.println(“First parameter: “ + args[0]);
System.out.println(“Second parameter: + args[1]);
}
}
Two Dimensional Arrays
A two-dimensional array can be thought of as
a table of elements, with rows and columns
one
dimension
two
dimensions
Two Dimensional Arrays
Declared as follows:
int[][] scores = int[12][10];
Elements referenced by pairs:
value = scores[4][8];
\\two bounds to check
To be accurate… this is just an array of
arrays… not a new type
An entire row can be referenced with a single
index
arrayvariable = scores[4];
The ArrayList Class
Included in the java.util package
Essentially, it is an array that can grow and
shrink
add elements and remove elements
Another advantage: can store multiple types
The ArrayList Class
Example:
ArrayList lunch = new ArrayList();
lunch.add(“apple”);
lunch.add(“peanut butter sandwich”);
System.out.println(lunch);
Creates a new array list
Adds two string elements
Prints both out (using hidden toString() )
The ArrayList Class
Elements can be inserted or removed with a
single method invocation
When an element is inserted, the other
elements "move aside" to make room
Likewise, when an element is removed, the
list "collapses" to close the gap
The indexes of the elements adjust
accordingly
ArrayList Efficiency
The ArrayList class is implemented using an
underlying array
The array is manipulated so that indexes remain
continuous as elements are added or removed
If elements are added to and removed from the end
of the list, this processing is fairly efficient
But as elements are inserted and removed from the
front or middle of the list, the remaining elements
are shifted
Searching
Searching
A common problem: find an item in an array
find exact match
find item that contains…
return position
return element
Linear Search
In general, we need to go through every
element in the array
Pseudocode:
for i from 0 to length – 1
if array[i]=target :
return i
return -1
\\ indicates target not in array
Java implementation in text
Properties
Will work on any array
searches every element
will find target if it’s there
Problem: it is slow
searches every element
might not be necessary in some arrays
Binary Search
Suppose we have a sorted array
then we can avoid looking at every element
-2
-1
8
14 17 23 29 37 74 75 81 87 95
We are looking for 17 in this array
Half the array can quickly be eliminated
Look in the middle: 29
Can ignore second half of the array
Details
Keep track of the “candidate” part of the array
Look at the middle of the candidate part
Found it? DONE!
Not found? Throw away one half
-2
-1
8
14 17 23 29 37 74 75 81 87 95
-2
-1
8
14 17 23 29 37 74 75 81 87 95
-2
-1
8
14 17 23 29 37 74 75 81 87 95
Pseudocode
first = 0 \\ start of candidate array
last = length -1 \\ end of candidate array
while first <= last
mid = (first+last)/2
if (array[mid]=target): return mid
else if (array[mid] < target): first = mid+1
else if (array[mid] > target): last = mid-1
return -1 \\ not in array
Example, again
first = 0, last =12, mid = 6
-2
-1
8
14 17 23 29 37 74 75 81 87 95
first = 0, last =5, mid = 2
-2
-1
8
14 17 23 29 37 74 75 81 87 95
first = 3, last =5, mid = 4
-2
-1
return 4
8
14 17 23 29 37 74 75 81 87 95
Speed
binary search
linear search
example took 3 steps
worst case: 4 ( approx. log2(n) )
worst case: 13 (=n)
binary search is much faster for large arrays
but we need the array to be sorted…
how much work does that require…