6 arrays injava

33
Arrays in JAVA

Transcript of 6 arrays injava

Arrays in JAVA

Arrays

• An array is a container object that holds a fixed number of values of a single type.

• The length of an array is established when the array is created.

Creating and initializing an array.

Making an array in a Java program involves three distinct steps:

1. Declare the array name and type.

2. Create the array.

3. Initialize the array values.

Declare the array name and type.

• Do not have to create an array while declaring array variable

– <type> [] variable_name;

– int [] a;

– int a[];

• Both syntaxes are equivalent

• No memory allocation at this point

Create an array

• Create an array as follows:– variable_name=new <type>[N];

– a=new int[10];

• Declaring and create in the same statement:– int[] a=new int[10];

• In JAVA, int is of 4 bytes, total space=4*10=40 bytes

Initialize the array values

Specifying the initialization values

The default initial value Numeric types to zero for

Boolean type to false.

Char values to ‘\u0000’ (unicode for blank character)

Class types to null

int[] a = new int[10];

...

a[3] = -9;

...

Graphical Representation

0 1 2 3 4 5 6 7 8 9

2 1 11 -9 2 1 11 90 101 2

aIndex

value

What happens if …

We define int[] a=new long[20];

Morea.java:5: incompatible typesfound: long[]required: int[]int[] a = new long[20];

^

The right hand side defines an array, and thus the array variable should refer to the same type of array

What happens if …

• Valid code:int k=7;long[] a = new long[k];

• Invalid Code:

int k;

long[] a =new long[k];

Compilation Output:

Morea.java:6: variable k might not have been initialized

long[] a = new long[k];

Array Size through Input

….

BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));

String inData;int num; System.out.println("Enter a Size for Array:");inData = stdin.readLine();num = Integer.parseInt( inData ); // convert

inData to intlong[] a = new long[num]; System.out.println(“Array Length=”+a.length);….SAMPLE RUN:Enter a Size for Array:4

Accessing Array Elements

Index of an array is defined as Positive int, byte or short values Expression that results into these types

Any other types used for index will give error long, double, etc. Incase Expression results in long, then type cast to int

Indexing starts from 0 and ends at N-1a[2]=0;int k = a[2];…

Validating Indexes

• JAVA checks whether the index values are valid at runtime– If index is negative or greater than the size of the array then an

IndexOutOfBoundException will be thrown

– Program will normally be terminated unless handled in the try {} catch {}

What happens if …

long[] a= new long[20];

a[25]=33;

….

Runtime Error:

Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 25

at Morea.main(Morea.java:6)

Reusing Array Variables

Array variable is separate from array itself Like a variable can refer to different values at different points in the

program Use array variables to access different arrays

int[] a=new int[10];……a=new int[50];

Previous array will be discarded Cannot alter the type of array

Initializing Arrays

Initialize and specify size of array while declaring an array variable

int[] a={2,3,5,7,11,13,17}; //7 elements

You can initialize array with an existing arrayint[] even={2,4,6,8,10};int[] value=even;

One array but two array variables! Both array variables refer to the same array Array can be accessed through either variable name

Graphical Representation

0 1 2 3 4

2 4 6 8 10

even

value

Demonstration

long[] a1 = new long[20];

a1[0] = 2;

a1[1] = 3;

long[] a2=a1;

System.out.println(a2[0]);

a2[0]=5;

System.out.println(a2[0]);

Output

2

5

Array Length

• Refer to array length using length

– A data member of array object

– array_variable_name.length

– for(int k=0; k<a.length;k++)

….

• Sample Code:

long[] a = new long[20];

System.out.println(a.length);

• Output: 20

Arrays of Arrays

• Two-Dimensional arrays

– float[][] temperature=new float[10][365];

– 10 arrays each having 365 elements

– First index: specifies array (row)

– Second Index: specifies element in that array (column)

– In JAVA float is 4 bytes, total Size=4*10*365=14,600 bytes

Graphical Representation

0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9

0 1 2 3 4 5 6 7 8 9

Sample[0]

Sample[1]

Sample[2]

Initializing Array of Arrays

int[][] array2D = { {99, 42, 74, 83, 100}, {90, 91, 72, 88, 95}, {88,

61, 74, 89, 96}, {61, 89, 82, 98, 93}, {93, 73, 75, 78, 99}, {50,

65, 92, 87, 94}, {43, 98, 78, 56, 99} };

//5 arrays with 5 elements each

Arrays of Arrays of Varying Length

• All arrays do not have to be of the same length

float[][] samples;

samples=new float[6][];//defines # of arrays

samples[2]=new float[6];

samples[5]=new float[101];

• Not required to define all arrays

Initializing Varying Size Arrays

int[][] uneven = { { 1, 9, 4 }, { 0, 2}, { 0, 1, 2, 3, 4 } };

//Three arrays

//First array has 3 elements

//Second array has 2 elements

//Third array has 5 elements

Array of Arrays Length

long[][] aa = new long[20][];

aa[2] = new long[30];

System.out.println(aa.length); //Number of arrays

System.out.println(aa[2].length);//Number of elements in the second array

OUTPUT:

20

30

Sample Program

class unevenExample3 {

public static void main( String[] arg ) { // declare and construct a 2D array

int[][] uneven = { { 1, 9, 4 }, { 0, 2}, { 0, 1, 2, 3, 4 } }; // print out the array for ( int row=0; row < uneven.length; row++ ) //changes row{

System.out.print("Row " + row + ": "); for ( int col=0; col < uneven[row].length; col++ )

//changes column System.out.print( uneven[row][col] + " "); System.out.println();

} }

}

Output

Row 0: 1 9 4

Row 1: 0 2

Row 2: 0 1 2 3 4

Multidimensional Arrays

• A farmer has 10 farms of beans each in 5 countries, and each farm has 30 fields!

• Three-dimensional array

long[][][] beans=new long[5][10][30];

//beans[country][farm][fields]

Varying length in Multidimensional Arrays

• Same features apply to multi-dimensional arrays as those of 2 dimensional arrays

long beans=new long[3][][];//3 countries

beans[0]=new long[4][];//First country has 4 farms

beans[0][4]=new long[10];

//Each farm in first country has 10 fields

Interview questions

• You are given an array with integers between 1 and 1,000,000. One integer is in the array twice. How can you determine which one? Can you think of a way to do it using extra memory?

Interview questions

• Solution 1: (extra memory, but faster)1. Have a hash table

2. Go over the array and store its elements in hash table

3. As soon as you find an element which is already in hash table, it is the dup element

• Solution2: (no extra memory, but slower)1. Sort the array using merge sort (O(n log n) time)

2. Parse again and if you see a element twice you got the dup element.

Interview questions

• Return the sum two largest integers in an array

int SumTwoLargest(int* anData, int size)

• Sum n largest integers in an array of integers where every integer is between 0 and 9

int SumNLargest(int* anData, int size, int n)