\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{jimisanchez} \pdfinfo{ /Title (seng-6250.pdf) /Creator (Cheatography) /Author (jimisanchez) /Subject (SENG 6250 Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{0AA319} \definecolor{LightBackground}{HTML}{F7FCF7} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{SENG 6250 Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{jimisanchez} via \textcolor{DarkBackground}{\uline{cheatography.com/27671/cs/8075/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}jimisanchez \\ \uline{cheatography.com/jimisanchez} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 2nd May, 2016.\\ Updated 8th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{4} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Generic count \# of elements in a collection}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public final class Algorithm \{ \newline public static \textless{}T\textgreater{} int countIf(Collection\textless{}T\textgreater{} c, UnaryPredicate\textless{}T\textgreater{} p) \{ \newline int count = 0; \newline for (T elem : c) \newline if (p.test(elem)) \newline ++count; \newline return count; \newline \} \newline \} \newline public interface UnaryPredicate\textless{}T\textgreater{} \{ \newline public boolean test(T obj); \newline \} \newline import java.util.*; \newline class OddPredicate implements UnaryPredicate\textless{}Integer\textgreater{} \{ \newline public boolean test(Integer i) \{ return i \% 2 != 0; \} \newline \} \newline public class Test \{ \newline public static void main(String{[}{]} args) \{ \newline Collection\textless{}Integer\textgreater{} ci = Arrays.asList(1, 2, 3, 4); \newline int count = Algorithm.countIf(ci, new OddPredicate()); \newline \seqsplit{System.out.println("Number} of odd integers = " + count); \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{The program prints: \newline Number of odd integers = 2} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{compile? If not, why?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public class Singleton\textless{}T\textgreater{} \{ \newline public static T getInstance() \{ \newline if (instance == null) \newline instance = new Singleton\textless{}T\textgreater{}(); \newline return instance; \newline \} \newline private static T instance = null; \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{No. You cannot create a static field of the type parameter T.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Swap positions of two elements in array.}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public final class Algorithm \{ \newline public static \textless{}T\textgreater{} void swap(T{[}{]} a, int i, int j) \{ \newline T temp = a{[}i{]}; \newline a{[}i{]} = a{[}j{]}; \newline a{[}j{]} = temp; \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Method 2 find the maximal element of a list.}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{import java.util.*; \newline public final class Algorithm \{ \newline public static \textless{}T extends Object \& Comparable\textless{}? super T\textgreater{}\textgreater{} \newline T max(List\textless{}? extends T\textgreater{} list, int begin, int end) \{ \newline T maxElem = list.get(begin); \newline for (++begin; begin \textless{} end; ++begin) \newline if \seqsplit{(maxElem.compareTo(list.get(begin))} \textless{} 0) \newline maxElem = list.get(begin); \newline return maxElem; \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{How invoke 2 find the first integer...}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public static \textless{}T\textgreater{} \newline int findFirst(List\textless{}T\textgreater{} list, int begin, int end, UnaryPredicate\textless{}T\textgreater{} p) \newline \_\_\_ \newline import java.util.*; \newline public final class Algorithm \{ \newline public static \textless{}T\textgreater{} \newline int findFirst(List\textless{}T\textgreater{} list, int begin, int end, UnaryPredicate\textless{}T\textgreater{} p) \{ \newline for (; begin \textless{} end; ++begin) \newline if \seqsplit{(p.test(list.get(begin)))} \newline return begin; \newline return -1; \newline \} \newline // x \textgreater{} 0 and y \textgreater{} 0 \newline public static int gcd(int x, int y) \{ \newline for (int r; (r = x \% y) != 0; x = y, y = r) \{ \} \newline return y; \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Compiler erases parameters, y use generics?}} \tn % Row 0 \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{The Java compiler enforces tighter type checks on generic code at compile time.} \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} \mymulticolumn{1}{x{3.833cm}}{Generics support programming types as parameters.} \tn % Row Count 3 (+ 1) % Row 2 \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{Generics enable you to implement generic algorithms.} \tn % Row Count 5 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Converted to after type erasure?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public class Pair \{ \newline public Pair(Object key, Object value) \{ \newline this.key = key; \newline this.value = value; \newline \} \newline public Object getKey() \{ return key; \} \newline public Object getValue() \{ return value; \} \newline public void setKey(Object key) \{ this.key = key; \} \newline public void setValue(Object value) \{ this.value = value; \} \newline private Object key; \newline private Object value; \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{converted to after type erasure?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public static \textless{}T extends Comparable\textless{}T\textgreater{}\textgreater{} \newline int findFirstGreaterThan(T{[}{]} at, T elem) \{ \newline // ... \newline \} \newline // becomes \newline public static int findFirstGreaterThan(Comparable{[}{]} at, Comparable elem) \{ \newline // ... \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{compile? If not, why?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public static void print(List\textless{}? extends Number\textgreater{} list) \{ \newline for (Number n : list) \newline System.out.print(n + " "); \newline System.out.println(); \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{Yes} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Will the following class compile? If not, why?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{public final class Algorithm \{ \newline public static \textless{}T\textgreater{} T max(T x, T y) \{ \newline return x \textgreater{} y ? x : y; \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{No. The greater than (\textgreater{}) operator applies only to primitive numeric types.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Compile?}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{class Node\textless{}T\textgreater{} implements Comparable\textless{}T\textgreater{} \{ \newline public int compareTo(T obj) \{ /{\emph{ ... }}/ \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{Yes.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{3.833cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{3.833cm}}{\bf\textcolor{white}{Compile}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{class Shape \{ /{\emph{ ... }}/ \} \newline class Circle extends Shape \{ /{\emph{ ... }}/ \} \newline class Rectangle extends Shape \{ /{\emph{ ... }}/ \} \newline class Node\textless{}T\textgreater{} \{ /{\emph{ ... }}/ \} \newline Node\textless{}Circle\textgreater{} nc = new Node\textless{}\textgreater{}(); \newline Node\textless{}Shape\textgreater{} ns = nc;} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{3.833cm}}{No. Because Node\textless{}Circle\textgreater{} is not a subtype of Node\textless{}Shape\textgreater{}.} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}