INTEGER: byte(8bit),short(16bit),int(32bit), else if( bool ) { STATEMENTS } public class Ball {//only 1 public per file long(64bit),DECIM:float(32bit),double(64bit) else if( ..etc ) { STATEMENTS } //STATIC FIELDS/METHODS ,OTHER: boolean(1bit), char (Unicode) else { STATEMENTS } private static int numBalls = 0; HEX:0x1AF,BINARY:0b00101,LONG:8888888888888L //curly brackets optional if one line public static int getNumBalls() { CHAR EXAMPLES: ‘a’,’\n’,’\t’,’\’’,’\\’,’\”’ LOOPS: return numBalls; while( bool ) { STATEMENTS } } Primitive Operators public static final int BALLRADIUS = 5; Assignment Operator: = (ex: int a=5,b=3; ) for(INIT;BOOL;UPDATE) { STATEMENTS } Binary Operators (two arguments): + - * / % //1INIT 2BOOL 3STATEMENTS 4UPDATE 5->Step2 do{ STATEMENTS }while( bool ); //INSTANCE FIELDS Unary Operators: + - ++ -- private int x, y, vx, vy; Boolean Not Operator (Unary): ! //do loops run at least once before checking break; //ends enclosing loop (exit loop) public boolean randomPos = false; Boolean Binary: == != > >= < <= Boolean Binary Only: && || continue; //jumps to bottom of loop ARRAYS: //CONSTRUCTORS Bitwise Operators: ~ & ^ | << >> >>> public Ball(int x, int y, int vx, int vy) Ternary Operator: bool?valtrue:valfalse; int[] x = new int[10]; //ten zeros { Casting, Conversion int[][] x = new int[5][5]; //5 by 5 matrix this.x = x; int x = (int)5.5; //works for numeric types int[] x = {1,2,3,4}; this.y = y; int x = Integer.parseInt(“123”); x.length; //int expression length of array this.vx = vx; float y = Float.parseFloat(“1.5”); int[][] x = {{1,2},{3,4,5}}; //ragged array this.vy = vy; int x = Integer.parseInt(“7A”,16); //fromHex String[] y = new String[10]; //10 nulls numBalls++; String hex = Integer.toString(99,16);//toHex //Note that object types are null by default } //Previous lines work w/ binary, other bases Ball() { //loop through array: java.util.Scanner, input, output for(int i=0;i<arrayname.length;i++) { x = Math.random()*100; Scanner sc = new Scanner(System.in); y = Math.random()*200; //use arrayname[i]; int i = sc.nextInt(); //stops at whitespace randomPos = true; } String line = sc.nextLine(); //whole line } System.out.println(“bla”); //stdout //for-each loop through array System.err.print(“bla”); //stderr,no newline //INSTANCE METHODS int[] x = {10,20,30,40}; java.lang.Number types public int getX(){ return x; } for(int v : x) { Integer x = 5; double y = x.doubleValue(); public int getY(){ return y; } //v cycles between 10,20,30,40 double y = (double)x.intValue(); public int getVX(){ return vx; } } //Many other methods for Long, Double, etc public int getVY(){ return vy; } public void move(){ x+=vx; y+=vy; } java.lang.String Methods //Loop through ragged arrays: public boolean touching(Ball other) { //Operator +, e.g. “fat”+”cat” -> “fatcat” for(int i=0;i<x.length;i++) float dx = x-other.x; boolean equals(String other); for(int j=0;j<x[i].length;j++) { float dy = y-other.y; int length(); //CODE HERE float rr = BALLRADIUS; char charAt(int i); } return Math.sqrt(dx*dx+dy*dy)<rr; String substring(int i, int j); //j not incl } boolean contains(String sub); //Note, multi-dim arrays can have nulls boolean startsWith(String pre); //in many places, especially object arrays: } boolean endsWith(String post); Integer[][] x = {{1,2},{3,null},null}; int indexOf(String p); //-1 if not found FUNCTIONS / METHODS: //Example Usage: int indexOf(String p, int i); //start at i Static Declarations: public static void main(String[] args) { int compareTo(String t); public static int functionname( … ) Ball x = new Ball(5,10,2,2); //“a”.compareTo(“b”) -> -1 private static double functionname( … ) Ball y = new Ball(); String replaceAll(String str, String find); static void functionname( … ) List<Ball> balls = new ArrayList<Ball>(); String[] split(String delim); Instance Declarations: balls.add(x); balls.add(y); StringBuffer, StringBuilder public void functionname( … ) for(Ball b : balls) { StringBuffer is synchronized StringBuilder private int functionname( … ) for(Ball o : balls) { (Use StringBuilder unless multithreaded) Arguments, Return Statement: if(b != o) { //compares references Use the .apend( xyz ) methods to concat int myfunc(int arg0, String arg1) { boolean touch = b.touching(o); toString() converts back to String return 5; //type matches int myfunc } java.lang.Math } } Math.abs(NUM),Math.ceil(NUM),Math.floor(NUM) //Non-void methods must return before ending } ,Math.log(NUM),Math.max(A,B),Math.min(C,D), //Recursive functions should have an if } Math.pow(A,B),Math.round(A),Math.random() //statement base-case that returns at once
POLYMORPHISM: JAVA COLLECTIONS: java.util.PriorityQueue<T> Single Inheritance with “extends” List<T>: Similar to arrays A queue that is always automatically sorted class A{ } ArrayList<T>: Slow insert into middle using the comparable function of an object class B extends A{ } //ArrayList has fast random access abstract class C { } LinkedList<T>: slow random access public static void main(String[] args) { class D extends C { } //LinkedList fast as queue/stack Comparator<String> cmp= new LenCmp(); class E extends D Stack: Removes and adds from end PriorityQueue<String> queue = Abstract methods new PriorityQueue<String>(10, cmp); abstract class F { List Usage: queue.add("short"); abstract int bla(); boolean add(T e); queue.add("very long indeed"); } void clear(); //empties queue.add("medium"); class G extends F { boolean contains(Object o); while (queue.size() != 0) int bla() { //required method T get(int index); System.out.println(queue.remove()); return 5; T remove(int index); } } boolean remove(Object o); class LenCmp implements Comparator<String> { } //remove uses comparator public int compare(String x, String y){ Multiple Inheritance of interfaces with T set(int index, E val); return x.length() – y.length(); “implements” (fields not inherited) Int size(); } interface H { } void methodA(); List Traversal: java.util.Collections algorithms boolean methodB(int arg); for(int i=0i<x.size();i++) { Sort Example: } //use x.get(i); //Assuming List<T> x interface I extends H{ } Collections.sort(x); //sorts with comparator void methodC(); Sort Using Comparator: } //Assuming List<T>: Collections.sort(x, new Comparator<T>{ interface K {} for(T e : x) { public int compareTo(T a, T b) { class J extends F implements I, K { //use e //calculate which is first int bla() { return 5; } //required from F } //return -1, 0, or 1 for order: void methodA(){} //required from H return someint; boolean methodB(int a) { //req from A Queue<T>: Remove end, Insert beginning } return 1; LinkedList implements Queue } } Example of two dimensional array sort: void methodC(){} //required from I Queue Usage: public static void main(final String[] a){ } T element(); // does not remove final String[][] data = new String[][] { Type inference: boolean offer(T o); //adds new String[] { "20090725", "A" }, A x = new B(); //OK T peek(); //pike element new String[] { "20090726", "B" }, B y = new A(); //Not OK T poll(); //removes new String[] { "20090727", "C" }, C z = new C(); //Cannot instantiate abstract T remove(); //like poll new String[] { "20090728", "D" } }; //Method calls care about right hand type Traversal: for(T e : x) {} Arrays.sort(data, (the instantiated object) Set<T>: uses Comparable<T> for uniqueness new Comparator<String[]>() { //Compiler checks depend on left hand type TreeSet<T>, items are sorted public int compare(final String[] GENERICS: HashSet<T>, not sorted, no order entry1, final String[] entry2) { class MyClass<T> { LinkedHashSet<T>, ordered by insert final String time1 = entry1[0]; T value; Usage like list: add, remove, size final String time2 = entry2[0]; T getValue() { return value; } Traversal: for(T e : x) {} return time1.compareTo(time2); } Map<K,V>: Pairs where keys are unique } class ExampleTwo<A,B> { HashMap<K,V>, no order }); A x; LinkedHashMap<K,V> ordered by insert B y; TreeMap<K,V> sorted by keys for (final String[] s : data) { } System.out.println(s[0]+" "+s[1]); class ExampleThree<A extends List<B>,B> { V get(K key); } A list; Set<K> keySet(); //set of keys } B head; V put(K key, V value); } } V remove(K key); More collections static methods: //Note the extends keyword here applies as Int size(); Collections.max( … ); //returns maximum well to interfaces, so A can be an interface Collection<V> values(); //all values Collections.min( … ); //returns maximum that extends List<B> Collections.copy( A, B); //A list into B Traversal: for-each w/ keyset/values Collections.reverse( A ); //if A is list