This commit is contained in:
Emanuele Slusarz
2026-05-11 17:35:58 +02:00
parent 29ef5b6655
commit e4d2eb3ab8
1264 changed files with 30997 additions and 136657 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,43 @@
package jcf_map.exercise;
import java.util.Map;
import java.util.TreeMap;
import binary_tree.BinaryNode;
public class BinaryTreeMap {
/*
* Esercizio 1 - Esame del secondo parziale 8/1/2019
* Scrivere un metodo generico statico ContaDuplicati che conta il numero
* di oggetti duplicati (non univoci) contenuti in un albero binario.
* Il risultato è il conteggio totale degli elementi che risultano duplicati
* (non il numero totale di occorrenze, ma il numero di oggetti distinti che
* hanno almeno un duplicato)
*/
public static <T extends Comparable<? super T>> int ContaDuplicati(BinaryNode<T> node) {
int dup = 0;
TreeMap<T, Integer> mappa = new TreeMap<T, Integer>();
ContaDuplicati(node, mappa);
for (T element : mappa.keySet()) {
int occurrency = mappa.get(element);
if (occurrency > 1) dup++;
}
return dup;
}
protected static <T> void ContaDuplicati(BinaryNode<T> node, TreeMap<T, Integer> mappa) {
if (node == null) return;
if (node.getLeft() != null) ContaDuplicati(node.getLeft(), mappa);
if (node.getRight() != null) ContaDuplicati(node.getRight(), mappa);
if (node.getData() == null) return;
T data = node.getData();
if (mappa.get(data) == null) mappa.put(data, 1);
else mappa.put(data, mappa.get(data) + 1);
}
}
+41
View File
@@ -0,0 +1,41 @@
package jcf_map.exercise;
import java.util.TreeMap;
public class CompanyMap {
/*
* EX1
* Supponiamo che chi vengano forniti il nome e il numero
* di divisione di ciascun dipendente di un'azienda.
* Non ci sono nomi duplicati. Vorremmo memorizzare
* queste informazioni in ordine alfabetico per nome.
*/
/*
* Spiegazione: si intende adoperare chiaramente un TreeMap.
* In modo che vi sia una associazione chiave-valore e un ordinamento basato
* sulla chiave.
* Chiave: String
* Valore: Integer
*/
public static void main(String[] main) {
new CompanyMap().run();
}
public void run() {
TreeMap<String, Integer> mappaAssociazione = new TreeMap<String, Integer>();
mappaAssociazione.put("Rossi Marco", 8);
mappaAssociazione.put("Bianchi Luca", 14);
mappaAssociazione.put("Esposito Andrea", 6);
mappaAssociazione.put("Ferrari Matteo", 6);
mappaAssociazione.put("Romano Giulia", 14);
mappaAssociazione.put("Ricci Alessia", 6);
System.out.println("Stampa mappa associazione: ");
System.out.println(mappaAssociazione);
System.out.println("Numero di dipendenti: " + mappaAssociazione.size());
}
}
+52
View File
@@ -0,0 +1,52 @@
package jcf_map.exercise;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
public class Dispari<E extends Comparable<? super E>> {
/*
* Esercizio 1 - Esame del 5 settembre 2017
*
* Una lista si dice dispari se ciascuno dei suoi oggetti appare un numero dispari di volte.
* Ad esempio, la lista di interi [20, 5, 5, 20, 20] non è dispari, mentre lo è [5, 20, 5 , 5].
* Si assuma una classe Dispari<E> con una sola variabile di instanza private LinkedList<E> myList.
* Si implementi un metodo public boolean ordinaDispari() {} interno alla classe,
* che restituisce false se myLisy non è dispari, mentre ordina in modo crescente la lista
* e restituisce true se myList è dispari;
* Si assuma che gli elementi presenti nella lista implementino l'interfaccia Comparable<T>
*/
// Variabile di instanza
private LinkedList<E> myList = new LinkedList<E>();
// Metodo di esercizio
public boolean isDispari() {
// Se la lista è vuota allora returna dispari
if (myList.isEmpty()) return true;
// Contatore di elementi nella lista
HashMap<E, Integer> valori = new HashMap<E, Integer>();
Iterator<E> it = myList.iterator();
while (it.hasNext()) {
E current = it.next();
if (valori.get(current) == null) valori.put(current, 1);
else valori.put(current, valori.get(current) + 1);
}
// Controllo short circuit di disparità
for (E chiave : valori.keySet()) {
int valore = valori.get(chiave);
if (valore % 2 == 0) return false;
}
// Arrivati qui la lista è dispari, manca solo l'ordinamento.
Collections.sort(myList);
return true;
}
}
@@ -0,0 +1,183 @@
package list.mylinkedlist;
import java.util.List;
import java.util.NoSuchElementException;
public class MyLinkedList<E> implements List<E> {
/*
* Classe Nodo
*/
private static class Node<E> {
// Dati del nodo
private E data;
// Riferimenti elemento precedente e successivo
private Node<E> prev;
private Node<E> next;
// Costruttore
public Node(E data, Node<E> prev, Node<E> next) {
this.data = data;
this.prev = prev;
this.next = next;
}
}
private Node<E> head = null;
private Node<E> tail = null;
private int size = 0;
// Costruttore
public MyLinkedList() {}
// Metodi
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public E getFirst() {
if (head == null) throw new NullPointerException();
return head.data;
}
public void addFirst(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
head.prev = newNode;
newNode.next = head;
head = newNode;
}
size++;
}
public E removeFirst() {
if (head == null) throw new NoSuchElementException();
E tmp = head.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> firstPlace = head;
Node<E> secondPlace = head.next;
head = secondPlace;
secondPlace.prev = null;
firstPlace.next = null;
}
size--;
return tmp;
}
public E getLast() {
if (tail == null) throw new NullPointerException();
return tail.data;
}
public E removeLast() {
if (tail == null) throw new NoSuchElementException();
E tmp = tail.data;
if (size == 1) {
head = tail = null;
} else {
Node<E> lastNode = tail;
Node<E> penultimateNode = tail.prev;
tail = penultimateNode;
penultimateNode.next = null;
lastNode.prev = null;
}
size--;
return tmp;
}
public void addLast(E item) {
if (item == null) throw new NullPointerException();
Node<E> newNode = new Node<E>(item, null, null);
if (size == 0) {
head = tail = newNode;
} else {
Node<E> oldLastNode = tail;
oldLastNode.next = newNode;
newNode.prev = oldLastNode;
tail = newNode;
}
size++;
}
public void clear() {
head = tail = null;
size = 0;
}
public boolean add(E item) {
if (item == null) throw new NoSuchElementException();
addLast(item);
return true;
}
public void add(int index, E item) {
if (item == null) throw new NullPointerException();
if (index < 0 || index > size) throw new IndexOutOfBoundsException();
// Se l'inserimento è richiesto nella prima posizione
if (index == 0) {
addFirst(item);
return;
}
// Se l'inserimento è richiesto nell'ultima posizione
if (index == size) {
addLast(item);
return;
}
// Se l'inserimento è richiesto nel generico posto i
Node<E> newNode = new Node<E>(item, null, null);
Node<E> prevNode = head;
for (int i = 0; i < index - 1; i++) {
prevNode = prevNode.next;
}
Node<E> nextNode = prevNode.next;
prevNode.next = newNode;
newNode.prev = prevNode;
newNode.next = nextNode;
nextNode.prev = newNode;
size++;
}
public E get(int index) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
return currentNode.data;
}
public E set(int index, E item) {
if (index < 0 || index >= size) throw new IndexOutOfBoundsException();
Node<E> currentNode = head;
for (int i = 0; i < index; i++) {
currentNode = currentNode.next;
}
E oldData = currentNode.data;
currentNode.data = item;
return oldData;
}
}
+69
View File
@@ -0,0 +1,69 @@
package parziale.p191108;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import java.util.TreeSet;
public class Archivio {
// Variabili di instanza
private Map<String, Cliente> archivio = new HashMap<String, Cliente>();
// Metodi
// 2. Inserimento nell'archivio
/*
* Inserimento nell'archio attuale di una nuova associazione,
* dati la targa dell'automobile(String) e un riferimento al proprietario
* della classe Cliente: se l'automobile è già presente, si aggiorni l'informazione
* relativa al proprietario
*/
public void aggiungi(String targa, Cliente cliente) {
if (targa == null || cliente == null) throw new NullPointerException();
targa = targa.trim();
if (targa.isEmpty()) throw new IllegalArgumentException();
archivio.put(targa, cliente);
}
// 3. Cancellazione dall'archivio attuale di un'automobile, data la sua targa
public void remove(String targa) {
if (targa == null) throw new NullPointerException();
targa.trim();
if (targa.isEmpty()) throw new IllegalArgumentException();
archivio.remove(targa);
}
// 4. Creazione di un nuovo archivio contenete le automobili selezionate dall'archivio principale aventi il proprietario residente in una data città.
public Map<String, Cliente> creaArchivoPerCitta(String citta) {
if (citta == null) throw new NullPointerException();
HashMap<String, Cliente> autoSelezionate = new HashMap<String, Cliente>();
for (String s : archivio.keySet()) {
Cliente currentCliente = archivio.get(s);
String currentCitta = currentCliente.cittaResidenza();
if (currentCitta.equals(citta)) autoSelezionate.put(s, currentCliente);
}
return autoSelezionate;
}
// 5. Ordinamento dellarchivio in modo lessicografico crescente rispetto alla targa delle automobili
public Map<String, Cliente> archivioOrdinatoRispettoAllaTarga() {
TreeMap<String, Cliente> archivioOrdinato = new TreeMap<String, Cliente>(archivio);
return archivioOrdinato;
}
// 6. Stampa su video l'archivio attuale
public void stampaArchivio() {
System.out.println(archivio);
}
}
+39
View File
@@ -0,0 +1,39 @@
package parziale.p191108;
import java.util.Objects;
public class Cliente {
// Variabili di instanza
private String nominativo;
private String cf;
private String cittaResidenza;
// Costruttore
public Cliente(
String nominativo,
String cf,
String cittaResidenza) {
this.nominativo = nominativo;
this.cf = cf;
this.cittaResidenza = cittaResidenza;
}
// Getters
public String nominativo() {
return nominativo;
}
public String cf() {
return cf;
}
public String cittaResidenza() {
return cittaResidenza;
}
// Hash
public int hashCode() {
return Objects.hash(nominativo, cf, cittaResidenza);
}
}