0% found this document useful (0 votes)
23 views30 pages

HO 03 Array

Uploaded by

Sinthu K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views30 pages

HO 03 Array

Uploaded by

Sinthu K
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Arrays

Array: motivation
 You want to store 5 numbers in a computer
 Define 5 variables, e.g. num1, num2, ..., num5
 What, if you want to store 1000 numbers?
 Defining 1000 variables is not feasible!
 Requires much programming effort
 Any better solution?
 Yes, some structured data type
o Array is one of the most common structured data types
o Saves a lot of programming effort (cf. 1000 variable
names)
What is an Array?
 A collection of data elements in which
 all elements are of the same data type, hence
homogeneous data
o An array of students’ marks
o An array of students’ names
o An array of objects (OOP perspective!)
 elements (or their references) are stored at
contiguous/ consecutive memory locations
 Array is a static data structure
 An array cannot grow or shrink during program
execution – its size is fixed
The array data structure
 An array is an indexed sequence of components
 Typically, the array occupies sequential storage locations
 The length of the array is determined when the array is
created, and cannot be changed
 Each component of the array has a fixed, unique index
 Indices range from a lower bound to an upper bound

 Any component of the array can be inspected


or updated by using its index
 This is an efficient operation: O(1) = constant time

4
Basic concepts
 Array name (data)
 Index/subscript (0...9)
 The slots are numbered sequentially
starting at zero (Java, C++)
 If there are N slots in an array, the
index will be 0 through N-1
 Array length = N = 10
 Array size = N x Size of an element = 40
 Direct access to an element
Array variations I
 The array indices may be integers – Java
 The lower bound is zero – Java
 In most languages, arrays are homogeneous (all
components must have the same type); in some (Lisp,
Prolog) the components may be heterogeneous (of
varying types)

6
Homogeneity
 All elements in the array must have the same
data type
Index: 0 1 2 3 4 5 6 7 8 9
Value: 5 10 18 30 45 50 60 65 70 80

Index: 0 1 2 3 4
Value: 5.5 10.2 18.5 45.6 60.5

Index: 0 1 2 3 4
Value: ‘A’ 10.2 55 ‘X’ 60.5 Not an array
Array variations II
 In an object-oriented language, arrays may be objects
(Java) or not objects (C++)

 Arrays may carry additional information about


themselves, such as type and length (Java), or may
consist only of their components (C, C++)

8
Arrays in Java I

 Array indices are integers


 An array of length n has bounds 0 and n-1
 Arrays are homogeneous
 However, an array of an object type may contain objects
of any subtype of that object
 For example, an array of Animal may contain objects of type
Cat and objects of type Dog
 An array of Object may contain any type of object (but cannot
contain primitives)

9
Arrays in Java II
 Arrays are objects
 Arrays are allocated by new, manipulated by reference, and
garbage collected
 However, the usual bracket notation a[i] is provided as
syntactic sugar
 Arrays are reflective
 a.length is the length of array a
 a.getClass() is the type of array a
 An array of integers has type [I

 An array of Strings has type [Ljava.lang.String;

10
Contiguous Memory
 Array elements are stored at contiguous memory
locations
Index: 0 1 2 3 4 5 6 7 8 9
Value: 5 10 18 30 45 50 60 65 70 80

 No empty segment in between values (3 & 5 are


empty – not allowed)
Index: 0 1 2 3 4 5 6 7 8 9
Value: 5 10 18 45 60 65 70 80
Arrays in Java III

 Here’s one way to visualize an array in Java:


myArray

class tag [I
length 4
0 17
1 23
2 948
3 3

12
Using Arrays
 Array_name[index]
 For example, in Java
 System.out.println(data[4]) will display
0

 data[3] = 99 will replace -3 with 99


Some more concepts
data[ -1 ] always illegal
data[ 10 ] illegal (10 > upper bound)
data[ 1.5 ] always illegal
data[ 0 ] always OK
data[ 9 ] OK

Q. What will be the output of?


1. data[5] + 10
2. data[3] = data[3] + 10
Subarrays
 A subarray is a consecutive portion of an array

0 1 2 3 4 5 6 7 8 9
array a [I 10 1 1 2 3 5 8 13 21 34 55

subarray a[2...6]

 Java provides no language support for subarrays


 To use a subarray, you must keep track of (1) the array
itself, (2) the lower bound, and (3) the upper bound
 Typically, these will be three parameters to a method that
does something with the subarray

15
Array as an ADT
 An array is an Abstract Data Type
 The array type has a set of values
 The values are all the possible arrays
 The array type has a set of operations that can be
applied uniformly to each of these values
 The only operation is indexing
 Alternatively, this can be viewed as two operations:
 inspecting an indexed location

 storing into an indexed location

 It’s abstract because the implementation is hidden: all


access is via the defined operations

16
Subarray as an ADT
 As noted earlier, to use a subarray, you must keep track of (1) the
array itself, (2) the lower bound, and (3) the upper bound
 This suggests:
class Subarray<V> {
V[ ] subarray;
int lowerBound;
int upperBound;
// Constructor, some methods...
}
 Advantage:
 Only one object to pass around
 Disadvantages:
 The subarray must hold Objects, not primitives
 You lose the nice array syntax

17
Array’s Dimensionality
 One dimensional (just a linear list)
 e.g., 5 10 18 30 45 50 60 65 70 80
 Only one subscript is required to access an individual
element

 Two dimensional (matrix/table)


 e.g., 2 x 4 matrix (2 rows, 4 columns)

Col 0 Col 1 Col 2 Col 3


Row 0 20 25 60 40
Row 1 30 15 70 90
One Dimensional Arrays
 To declare an array follow the type with (empty) []s
int[] grade; //or
int grade[]; //both declare an int array

 In Java arrays are objects so must be created with the new


keyword
 To create an array of ten integers:
int[] grade = new int[10];
Note that the array size has to be specified, although it can be
specified with a variable at run-time
Two-dimensional arrays I
 Some languages support two-dimensional (2D) arrays:
columns

a b c d  A two-dimensional array may be stored


rows e f g h in one-dimensional computer memory
i j k l in either of two ways:
logical view
row 0 row 1 row 2

row major order: a b c d e f g h i j k l

col 0 col 1 col 2 col 3

column major order: a e i b f j c g k d h l


20
Two-dimensional arrays II
 In a 2D array, we generally consider the first index to be the row,
and the second to be the column: a[row, col]
columns
0 1 2 3 4
0 0,0 0,1 0,2 0,3 0,4
1 1,0 1,1 1,2 1,3 1,4
rows
2 2,0 2,1 2,2 2,3 2,4
3 3,0 3,1 3,2 3,3 3,4

 In most languages we don’t need to know the implementation--


we work with this abstraction
 In Java, C and C++, we do need to know the implementation

21
2D arrays in Java
 Java doesn’t have “real” 2D arrays, but array elements can
themselves be arrays:
 int x[][] denotes an array x of array components, each of which is
an array of integer components
 We can define the above array like this:
x = new int[5][8];
and treat it as a regular 2D array
 This is an array of 5 arrays
 Each subarray is an array of 8 ints

 However, we can do fancier things than this with arrays in


Java

22
Ragged arrays

int ragged[][] = new int[4][]; 0


0 0 1
for (int i = 0; i < 4; i++) { 1 10 11 2
ragged[i] = new int[i + 1]; 2 20 21 22 3
} 3 30 31 32 33

for (int i = 0; i < 4; i++) {


for (int j = 0; j < ragged[i].length; j++) {
ragged[i][j] = 10 * i + j;
}
}

23
Array Operations
 Indexing: inspect or update an element using its index.
Performance is very fast O(1)
randomNumber = numbers[5];
numbers[20000] = 100;
 Insertion: add an element at certain index
– Start: very slow O(n) because of shift
– End : very fast O(1) because no need to shift
 Removal: remove an element at certain index
– Start: very slow O(n) because of shift
– End : very fast O(1) because no need to shift
 Search: performance depends on algorithm
1) Linear: slow O(n) 2) binary : O(log n)
 Sort: performance depends on algorithm
1) Bubble: slow O(n2) 2) Selection: slow O(n2)
3) Insertion: slow O(n2) 4)Merge : O (n log n)
Inserting an element into an array
 Suppose we want to insert the value 8 into this sorted array
(while keeping the array sorted)

1 3 3 7 12 14 17 19 22 30
 We can do this by shifting all the elements after the mark right by
one location
 Of course, we have to discard the 30 when we do this

1 3 3 7 8 12 14 17 19 22
• Moving all those elements makes this a slow
operation (linear in the size of the array)

25
Deleting an element from an array
 Deleting an element is similar--again, we have to move all
the elements after it

1 3 3 7 8 12 14 17 19 22

1 3 3 7 12 14 17 19 22 ?

 Deletion is a slow operation; we don’t want to do it very often


 Deletion leaves a “vacant” location at the end
 How do we mark it vacant?
 Every bit pattern represents a valid integer
 We must keep a count of how many valid elements are in the array

26
Arrays and ArrayLists
 Here are the advantages of arrays:
 Very efficient, in terms of both time and space
 Convenient syntax
 Here is the main disadvantage:
 Fixed size

27
Vectors and ArrayLists
 Vector methods include the following:
 public void insertElementAt(Object elem, int index)
 public void removeElementAt(int index)
 ArrayList methods include the following:
 public void add(int index, Object elem)
 public void remove(int index)
 These are slow (linear time) methods

28
Conclusions
 Arrays are not identical in all languages

 Arrays have the following advantages:


 Accessing an element by its index is very fast (constant
time)

 Arrays have the following disadvantages:


 All elements must be of the same type
 The array size is fixed and can never be changed
 Insertion into arrays and deletion from arrays is very slow

29
The End

30

You might also like