240 likes | 250 Views
Explore key concepts like ArrayList, generic classes, debugging, and object-oriented programming in Compsci 201 Spring 2019. Dive into hashing and understand the importance of Objects in Java. Discover practical coding tips and examples.
E N D
Compsci 201, Collections, Hashing, Objects Owen Astrachan ola@cs.duke.edu http://bit.ly/201spring19 January 30, 2019 Compsci 201, Spring 2019: Collections, Hashing
F is for … • Folder • aka Directory – where things are stored in Git • Function • Abstraction – a method in Java Compsci 201, Spring 2019: Collections, Hashing
PFLWoJ • Mundane Java-isms • From char to autoboxing: primitives • What is this? • Generic classes: ArrayList to HashSet • From Arrays to HashSet to Collections to … • From Object.equals to Object.hashCode • Everything is an Object, what can an object do? Compsci 201, Spring 2019: Collections, Hashing
NBody Review • Class CelestialBody represents Celestial Body • Why do we use myXPos and my… • Review: getters and mutators • Floating point issues, problems, quandaries • When is (a + b) + c != a + (b + c) • When is a/b * c != a*c / b • Watch for this in Gradescope tests!! Compsci 201, Spring 2019: Collections, Hashing
The Object Concept • Every instance variable and every non-static method accessed/called after Object.Dot • b.getX(), b.calcForcExertedBy(other) • From within a class, e.g., CelestialBody • myXPos, getX(),this.myXPos, • All are equivalent as is this.getX() • Some prefer always using this. – clearer? Compsci 201, Spring 2019: Collections, Hashing
Debugging Arithmetic • Order of operations with floating point values can result in overflow, underflow, more • Small number + Big number … Compsci 201, Spring 2019: Collections, Hashing
Debugging double Arithmetic • Integer values are not the same as Double values • 1/0 is … whereas 1.0/0 is … Compsci 201, Spring 2019: Collections, Hashing
WOTO http://bit.ly/201spring19-jan25-2 Compsci 201, Spring 2019: Collections, Hashing
Donald Knuth • aka “The Donald” • Turing award (and others) • Author of “The Art of Computer Programming” • Arguably most important book written in Computer Science • First publication: Mad Magazine If you optimize everything you will always be unhappy. Everyday life is like programming, I guess. If you love something you can put beauty into it. https://www.youtube.com/watch?v=cK7yyjXfbc4 Compsci 201, Spring 2019: Collections, Hashing
From Array to ArrayList • Have int[], String[], CelestialBody[] • Array of any type, but doesn't grow • Can't use .contains with array, can't print • The java.utils.Arrays class has some help Compsci 201, Spring 2019: Collections, Hashing
java.util.ArrayList • Growable array with many useful methods • https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/List.html • Can only contain Object types (no primitives) • Convert from array? • Arrays.asList • It's a List! • String yes, int no Compsci 201, Spring 2019: Collections, Hashing
From Array to ArrayList • Can make conversion with Object, e.g., String • Use Arrays.asList as a bridge, be careful Compsci 201, Spring 2019: Collections, Hashing
Primitive Array? do it yourself • No bridge from Arrays.asList since primitive • Loop and use autoboxing/unboxing • Conversion of int to Integer and vice versa Compsci 201, Spring 2019: Collections, Hashing
-- real world APT? • https://leetcode.com/problems/unique-morse-code-words/ • "a" > ".-", "b" > "-..." • "z" > "--.." • Note "gin" > "--...-." and "zen" > "--...-." • Given an array of strings, how many unique encodings are there? • Also given String[] of 26 Morse codes, where code[0] = ".-" for "a" Compsci 201, Spring 2019: Collections, Hashing
From Nothing to Done • Basic ideas: how do we access encodings in an array where code[1] is for 'b', "-…" • Arithmetic with char values, 'b' – 'a' == 1 • What about (int) 'b' == 97? • https://www.youtube.com/watch?v=xLpfbcXTeo8 • Loop over characters in a String? • Index k with s.charAt(k) • Or for(char ch : s.toCharArray()){ Compsci 201, Spring 2019: Collections, Hashing
WOTO with Live/Leet Code • Ideas for solving LeetCode problem • Given array of Strings, return number of unique Morse code encodings • How is a set useful here? Doable without? Compsci 201, Spring 2019: Collections, Hashing
Solution • This was added after class, developed together during class Compsci 201, Spring 2019: Collections, Hashing
ArrayList<…> • Generic aka parameterized type • Any Object subtype can be in ArrayList<..> • Integer, Double, Char, Boolean are wrapper classes for primitives • Mostly these work. But immutable. Cannot increment an Integer, can create new one Compsci 201, Spring 2019: Collections, Hashing
DIYAD ArrayList • Do It Yourself Algorithm and Datastructure • SimpleStringArrayList: some methods • GrowableStringArrayList: more methods • Differences between +10, +100, and *2 • Helper methods are private: checkSize() • https://coursework.cs.duke.edu/201spring19/diyad201 Compsci 201, Spring 2019: Collections, Hashing
DIYAD Ideas • Move from String to GrowableString to Generic • Lots of work to fit in with Collections hierarchy • For our own work? Easier! All of Java? Harder! • Differences between +10, +10000, *2 and * 1.2 • How do we measure empirically • How do we measure analytically Compsci 201, Spring 2019: Collections, Hashing
Measurement and Analysis • We measured runtimes empirically • Same on ola's laptop tomorrow? Next year? • What about your computer, super computer? • Mathematical analysis of runtimes • Machine independent • Compare algorithms without timing them! Compsci 201, Spring 2019: Collections, Hashing
Analysis via Pictures • Growing array by adding +1 (or + 100) each time • Create/copy 1, 2, 3, 4, …, N • 1+2+ … + N = N(N+1)/2 • Roughly N2 • Square with side N? Compsci 201, Spring 2019: Collections, Hashing
Analysis via Pictures Again • Growing array by doubling each time • Create/copy 1, 2, 4, 8, 16, … 2N • If X = 2N, we've created 2x2N-1, or 2X-1 • Roughly X, where "roughly" defined later Compsci 201, Spring 2019: Collections, Hashing
WOTO http://bit.ly/201spring19-jan30-1 Compsci 201, Spring 2019: Collections, Hashing