310 likes | 426 Views
Web Based Programming Section 11. James King 12 August 2003. Mass storage - Arrays, Strings and Vectors. Arrays. Mass Storage. Arrays. Arrays allow large numbers of simple data types such as int or instances of classes to be easily accessed. int array[]=new int[10]; array[0]=4;
E N D
Web Based Programming Section 11 James King 12 August 2003
Arrays Mass Storage
Arrays • Arrays allow large numbers of simple data types such as int or instances of classes to be easily accessed. int array[]=new int[10]; array[0]=4; array[9]=1234; System.out.println(array[0]); indicates that the array will hold 10 items indicates variable is an array accessing an element of an array also uses [] arrays start at 0 this is the last element of the array
Arrays holding Objects • Arrays can also hold instances of a class or any of its subclass Monster array[]=new Monster[10]; array[0]=new Monster(); array[9]=new Dragon(); array[0].take_damage(); indicates that the array will hold 10 instances of the Monster class or subclass Dragon is a subclass of Monster so this is fine array[0] is an instance of Monster so we can call take_damage on it
Dangers of Arrays of Objects • with an array of simple types such as ints every element in the array exists even if we don’t assign a value to them int array[]=new int[2]; System.out.println(array[0]); • with an array of Objects elements are null until we assign an instance to them Monster array[]=new Monster[2]; array[0].take_damage(); no problem!! null pointer exception!
Initialising Object Arrays • unlike arrays of simple types arrays of any type of object require each element to be instantiated and inserted into the array... Monster array[]=new Monster[2]; array[0]=new Monster(); array[1]=new Monster(); array[0].take_damage();
Loops and Arrays • loops are natural ways to perform the same operation on each element of an array (or a sub set). For example int array[]=new int[10]; int index; for (index=0;index<10;index=index+1) { array[index]=0; }
Loops and Dangers int array[]=new int[10]; int index; for (index=0;index<10;index=index+1) { array[index]=0; } • There is a problem with this code. Suppose I change the array to only have 5 elements... as soon as the index is 5 and tries to assign 0 to the element in position 5 Java will issue an array out of bounds exception
Finding the number of elements in anarray • Fortunately we can ask the array how long it is using .length int array[]=new int[10]; int index; for (index=0;index<array.length;index=index+1) { array[index]=0; } • Now we can make the array bigger or smaller and the code will not crash and will initialise the entire array
Problems with Arrays I • The single biggest problem with an array is that it is not variable length. You have to declare the length of the array as a constant and you can not tag on extra elements int array[]=new array[20]; array[30]=1234; array out of bounds exception!
Problems with arrays II • You also can not remove elements in an array even if they are no longer needed. For instance suppose I have an array of 4 Monsters which the Hero is fighting. If the Hero kills 2 it would be nice to remove two from the array... the only thing you can do is to replace the dead instance with null.
Strings Mass Storage
Strings • The String class allows you to store and manipulate sequences of characters • Like chars, Strings are case sensitive so “hello” is not the same as “Hello” • Strings are in fact Objects • The length method tells you the length of a string in chars e.g. “hello”.length()==5 • You can get a copy of the character at any position in a string using charAt() • “hello”.charAt(0)==‘h’ • “hello”.charAt(4)==‘o’
Relationship between String and Arrays • It is possible to get a copy of the contents of a String as a char array String s="hello world"; char con[]=new char[s.length()]; s.getChars(0,s.length(),con,0); make sure the array is large enough to store the entire String Starting char in the String ending char +1 in the String starting position in the array array to copy chars into
Relationship between String and Arrays • It is also possible to create a string from a char array String s="hello world"; char con[]=new char[s.length()]; s.getChars(0,s.length(),con,0); con[0]='H'; s=new String(con); System.out.println(s); • However, manipulating char arrays is not easy so in general it is better to manipulate the String by keeping it in its String format
Manipulating Strings • There are many manipulation functions defined for the string object one of the most useful is subString • You can get a copy of part of a string using subString • “hello”.subString(0,2)==“hel” • “hello”.substring(2,3)==“ll” ending index starting index
Adding to your String • Unlike arrays, Strings can be appended and pre-pended to easily String s=“world”; s=“hello “+s; s=s+”!”; • This gives the String “hello world!”
Seeing if Two Strings are Equal using == • For simple types you can use == and != to see if something is equal or not equal. • == and != do not work correctly for objects String s=“hello there”; String s1=“hello there”; s==s is true s1==s1 is true s==s1 is false!!!!!!!!!!!!!! • This is because for objects == and != check where the instance is in memory and not the contents of the instances
Seeing if Two Strings are Equal using equals • To see if two Strings are identical you need to use equals() or equalsIgnoreCase() String s=“hello there”; String s1=“hello there”; s.equals(s) is true s.equals(s1) is true s.equals(s1) is true • This is because equals and equalsIgnoreCase check the contents of the instances and not their locations in memory
Converting other types into Strings • Java will convert almost any simple type into a String for you String s=“”; int i=166; s=“”+i; • This does not work for Objects because Java can not work out how to convert an object into a String “” is an empty String “” converts a copy of i into a String
Converting Strings into other types. • Java provides static methods in classes called Integer, Long, Float and Double to help you: int i=Integer.parseInt("100"); long l=Long.parseLong("100"); float f=Float.parseFloat("100"); double d=Double.parseDouble("100"); • If and only if the entire String looks like another type can the conversion take place. int i=Integer.parseInt(“hello 100"); Exception
More String Functions • There are many more String manipulation functions than we have time for to look at here • Take a look at the Java documentation for the String class and have some fun!
Vectors Mass Storage
Vectors • Vectors offer an alternative from arrays that allow you to insert, delete and add extra elements. • Unfortunately Vectors can only store objects so you can not create a Vector of simple data types such as int.... but there is nothing stopping you putting a single int into a class and putting that class into the Vector... • Vectors are in the package java.util and so require importing import java.util.*;
Vectors • Unlike arrays that can only store a single class and its subclasses Vectors can store anything in any position... Its up to you to remember what is in each element... Vector v=new Vector(); v.insertElementAt(new Monster(),0); v.insertElementAt(new Hero(),1);
Vectors getting the value of an element • Unlike arrays elementAt is used to access an element of the Vector • However, element at returns a generic Object which must be type cast to be used Vector v=new Vector(); v.insertElementAt(new Monster(),0); Monster m=(Monster)v.elementAt(0); m.take_damage();
Vectors and invalid type casts • If you use elementAt and type cast into the wrong type of object you will get a invalid type cast exception Vector v=new Vector(); v.insertElementAt(new Hero(),0); Monster m=(Monster)v.elementAt(0); m.take_damage();
Finding the number of elements in a Vector • The vector is actually a class and we can ask it how many elements are in it using the size method Vector v=new Vector(); v.insertElementAt(new Hero(),0); v.insertElementAt(new Dragon(),1); int i=v.size();
Removing items from Vectors • You can remove a single element from the Vector (all the high numbered elements are moved down to fill the gap) Vector v=new Vector(); v.insertElementAt(new Hero(),0); v.insertElementAt(new Dragon(),1); v.removeElementAt(0); • The elementAt(0) is now an instance of Dragon
Removing All the items from a Vector • You can remove all the items from a vector Vector v=new Vector(); v.insertElementAt(new Hero(),0); v.insertElementAt(new Dragon(),1); v.removeAllElements();