hw3: added idea

This commit is contained in:
Claudio Maggioni 2022-11-06 19:30:32 +01:00
parent 6e521f8226
commit b1f3bdefb2
4 changed files with 137 additions and 0 deletions

2
hw3/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
artist.txt
.idea/

BIN
hw3/logo_usi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
hw3/report.pdf Normal file

Binary file not shown.

135
hw3/report.tex Normal file
View file

@ -0,0 +1,135 @@
\documentclass[a4paper]{article}
\usepackage{graphicx}
\usepackage[hidelinks]{hyperref}
\usepackage[english]{babel}
\usepackage{fancyhdr}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{float}
\usepackage{lmodern}
\usepackage[margin=2cm,top=2.5cm]{geometry}
\hypersetup{pdfborder={0 0 0}}
\usepackage[nomessages]{fp}
\lstset{
basicstyle=\small\ttfamily,
%frame=shadowbox,
rulesepcolor=\color{black},
columns=fullflexible,
commentstyle=\color{gray},
keywordstyle=\color{blue},
mathescape=true,
aboveskip=1em,
captionpos=b,
abovecaptionskip=1em,
belowcaptionskip=1em
}
\fancyhead[R]{Advanced Java Programming -- Assignment 2 -- Federico Lagrasta,
Claudio Maggioni}
\pagestyle{fancy}
\begin{document}
\begin{titlepage}
\scshape
\centering
\includegraphics[width=3cm, keepaspectratio]{logo_usi.png}
\par
\vspace{0.1cm}
\texttt{FACULTY OF INFORMATICS}
\vspace{1cm}
\raisebox{-\baselineskip}{\rule{\textwidth}{1px}}
\rule{\textwidth}{1px}
\vspace{0.2cm}
{\LARGE{{ADVANCED JAVA PROGRAMMING}}}\par \vspace{0.1cm}
Assignment 3
\rule{\textwidth}{2px}
\vspace{1cm}
\begin{tabular}{lp{1cm}l}
Author & \rule{0pt}{3ex} & FEDERICO \mbox{LAGRASTA}\\
&&\\
& \rule{0pt}{3ex} & CLAUDIO \mbox{MAGGIONI}\\
\end{tabular}
\vspace{1.3cm}
\vfill
\today
\end{titlepage}
\section*{A}
\subsection*{1}
The code will trigger a compile time error at line 14, since the variable
\textit{z} cannot be used inside a lambda as it is not final or effectively
final. This is because line 14 attempts to mutate the variable, thus making the
variable not effectively final.
\subsection*{2}
The code will not compile.
\section*{B}
\subsection*{1}
According to the contract satisfied by the \texttt{java.util.HashSet} class,
there is no guarantee on the iteration order of the elements. Therefore,
\texttt{set.stream()} evaluates to a stream whose ordering contractually does
not reflect the order of the list. However, by analyzing the Java 17 standard
library sources, given that:
\begin{itemize}
\item The elements of the source list are \textit{Integer}s and are already in natural order;
\item \textit{HashSet} uses a \textit{HashMap} by encapsulation to store its elements;
\item The \textit{Spliterator} returned by \textit{HashSet} is the \textit{Spliterator} over the keys
of the backing \textit{HashHap};
\item \textit{HashMap}'s spliterator implementation iterates over the key objects in the natural order
of each object's hash code;
\item \textit{Integer}'s \texttt{int hashCode()} implementation just returns the boxed \textit{int};
\end{itemize}
we can say that on any JVM this code is ran where the implementation of the
standard library matches the sources provided with OpenJDK 17, we can say that
in practice the \textit{Spliterator} backing the stream returned by
\texttt{set.stream()} returns the elements in the correct order.
However, the \texttt{java.util.stream} package
documentation\footnote{\url{https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/stream/package-summary.html\#Ordering}},
under the \textit{Ordering} section, explicitly mentions that the
\textit{Stream} returned by an \textit{HashSet} is unordered. Therefore, also by
the Stream API contract, we can say that the collection of this stream may
result into a list that contractually is not in the order the elements were when
creating the stream. However, in practice, since the created stream is
sequential, the elements are kept in the given order as there is no performance
advantage (unlike with parallel streams) in unordering them. Therefore,
according to this contract, the method may throw a \textit{RuntimeException}
even if this never happens in practice with any JVM with a standard library
implementation matching the sources provided with OpenJDK 17.
\marginpar[right text]{\color{white}\url{https://youtu.be/oqO-nlrZNbc}}
\subsection*{2}
What said in the previous section still applies, however in this case line 31
makes the stream parallel, and since the stream is contractually unordered there
is no guarantee the elements may be collected in order since the stream API
implementation may not follow the original ordering for parallelization
performance reasons.
\end{document}