tp7 - perso.limsi.fr · abbara rachid l3cfa . return res; } @override public iterator < integer...

5
Abbara Rachid L3cfa TP7 public class MySet implements Iterable<Integer> { private LinkedList<Integer> liste; private Iterator<Integer> iterator; private int nbElement; public MySet() { this.liste = new LinkedList<Integer>(); this.nbElement = 0; this.iterator = this.liste.iterator(); } public void add(int el) { if (!this.liste.contains(el)) { this.liste.add(el); this.nbElement++; } } public void del(int el) { this.liste.remove(el); if (this.nbElement > 0) { this.nbElement--; } } public boolean contains(int el) { return this.liste.contains(el); } public String toString() { LinkedList<Integer> listSorted = sortList(this.liste); String res = ""; for (int el : listSorted) { if (this.nbElement == 1 || el == listSorted.getLast()) { res += el; break; } res += el + "-"; } return res; } private LinkedList<Integer> sortList(LinkedList<Integer> liste) { LinkedList<Integer> res = (LinkedList<Integer>) this.liste.clone(); Comparator<Integer> c = new Comparator<Integer>() { @Override public int compare(Integer e1, Integer e2) { return e1 - e2; } }; Collections.sort(res, c);

Upload: others

Post on 30-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: TP7 - perso.limsi.fr · Abbara Rachid L3cfa . return res; } @Override public Iterator < Integer > iterator {return this.iterator; } public void setIteratorOrder (boolean ascending

Abbara Rachid L3cfa

TP7 public class MySet implements Iterable<Integer> {

private LinkedList<Integer> liste;

private Iterator<Integer> iterator;

private int nbElement;

public MySet() {

this.liste = new LinkedList<Integer>();

this.nbElement = 0;

this.iterator = this.liste.iterator();

}

public void add(int el) {

if (!this.liste.contains(el)) {

this.liste.add(el);

this.nbElement++;

}

}

public void del(int el) {

this.liste.remove(el);

if (this.nbElement > 0) {

this.nbElement--;

}

}

public boolean contains(int el) {

return this.liste.contains(el);

}

public String toString() {

LinkedList<Integer> listSorted = sortList(this.liste);

String res = "";

for (int el : listSorted) {

if (this.nbElement == 1 || el == listSorted.getLast()) {

res += el;

break;

}

res += el + "-";

}

return res;

}

private LinkedList<Integer> sortList(LinkedList<Integer> liste) {

LinkedList<Integer> res = (LinkedList<Integer>)

this.liste.clone();

Comparator<Integer> c = new Comparator<Integer>() {

@Override

public int compare(Integer e1, Integer e2) {

return e1 - e2;

}

};

Collections.sort(res, c);

Guillaume Wisniewski
pourquoi en attribut !!!
Guillaume Wisniewski
this.liste.size() non ?
Guillaume Wisniewski
pas le bon moment !
Guillaume Wisniewski
et si je fais un remove sur un élément qui n’est pas présent ?�
Guillaume Wisniewski
trop compliqué�
Guillaume Wisniewski
a-t-on vraiment besoin de faire un clone ?
Guillaume Wisniewski
12
Page 2: TP7 - perso.limsi.fr · Abbara Rachid L3cfa . return res; } @Override public Iterator < Integer > iterator {return this.iterator; } public void setIteratorOrder (boolean ascending

Abbara Rachid L3cfa

return res;

}

@Override

public Iterator<Integer> iterator() {

return this.iterator;

}

public void setIteratorOrder(boolean ascending) {

if (ascending) {

this.iterator = this.liste.iterator();

} else {

this.iterator = this.liste.descendingIterator();

}

}

public class TestMySet {

@Test

public void contains() {

MySet set = new MySet();

assertEquals(set.contains(0), false);

set.add(2);

set.add(1);

set.add(3);

set.add(0);

assertEquals(set.contains(1), true);

assertEquals(set.contains(0), true);

assertEquals(set.contains(5), false);

}

@Test

public void add() {

TabSet set = new TabSet();

assertEquals(set.toString(), "");

set.add(3);

set.add(5);

set.add(5);

assertEquals(set.toString(), "3-5");

}

@Test

public void del() {

TabSet set = new TabSet();

set.add(4);

set.del(4);

assertEquals(set.toString(), "");

set.add(6);

assertEquals(set.toString(), "6");

}

}

public class TabSet {

private int tab[];

private int nbElement;

Guillaume Wisniewski
et si je veux avoir plusieurs Iterator ?
Guillaume Wisniewski
Iterable ???
Page 3: TP7 - perso.limsi.fr · Abbara Rachid L3cfa . return res; } @Override public Iterator < Integer > iterator {return this.iterator; } public void setIteratorOrder (boolean ascending

Abbara Rachid L3cfa

public TabSet() {

this.nbElement = 0;

this.tab = new int[5];

}

public void add(int el) {

if (!this.contains(el)) {

if (this.nbElement == this.tab.length) {

this.tab = Arrays.copyOf(this.tab, (this.tab.length

/ 2));

}

this.tab[this.nbElement] = el;

this.nbElement++;

}

}

public void del(int el) {

int tabSorted[] = this.tab.clone();

Arrays.sort(tabSorted);

int indexOfValue = Arrays.binarySearch(tabSorted, el);

if (indexOfValue > -1) {

int[] newTab = copySansElement(tabSorted, indexOfValue);

this.nbElement--;

this.tab = newTab;

}

}

/*

* CopySansElement

*

* @param un tableau d'entier

*

* @param l'index de l'element dans le tableau

*

* @return un tableau d'entier sans l'element indexé en parametre

*/

private int[] copySansElement(int[] tabSorted, int indexOfValue) {

int[] newTab = new int[this.tab.length];

int j = 0;

if (indexOfValue < 0) {

return newTab;

}

for (int i = (newTab.length - this.nbElement); i <

newTab.length; i++) {

if (i == indexOfValue) {

continue;

}

newTab[j] = tabSorted[i];

j++;

}

return newTab;

}

public boolean contains(int el) {

int[] newTab = this.tab.clone();

Arrays.sort(newTab);

int[] newTabLimited = new int[this.nbElement];

Guillaume Wisniewski
inverser les conditions !
Guillaume Wisniewski
douteux !!!
Guillaume Wisniewski
pourquoi faire une copie du tableau !!!
Guillaume Wisniewski
trop compliqué !!!�
Page 4: TP7 - perso.limsi.fr · Abbara Rachid L3cfa . return res; } @Override public Iterator < Integer > iterator {return this.iterator; } public void setIteratorOrder (boolean ascending

Abbara Rachid L3cfa

for (int i = 0; i < this.nbElement; i++) {

newTabLimited[i] = newTab[this.tab.length -

this.nbElement + i];

}

int indexofValue = Arrays.binarySearch(newTabLimited, el);

if (indexofValue < 0) {

return false;

}

return true;

}

public String toString() {

String res = "";

int[] newTab = this.tab.clone();

Arrays.sort(newTab);

for (int i = (newTab.length - this.nbElement); i <

newTab.length; i++) {

if (newTab[i] == newTab[newTab.length - 1]) {

res += newTab[i];

break;

}

res += newTab[i] + "-";

}

return res;

}

public class TabSetTest {

@Test

public void contains() {

TabSet t = new TabSet();

assertEquals(t.contains(0), false);

t.add(2);

t.add(1);

t.add(3);

t.add(0);

assertEquals(t.contains(1), true);

assertEquals(t.contains(0), true);

assertEquals(t.contains(5), false);

}

@Test

public void add() {

TabSet t = new TabSet();

assertEquals(t.toString(), "");

t.add(3);

t.add(5);

t.add(5);

assertEquals(t.toString(), "3-5");

}

@Test

public void del() {

TabSet t = new TabSet();

t.add(4);

t.del(4);

assertEquals(t.toString(), "");

t.add(6);

assertEquals(t.toString(), "6");

}

Guillaume Wisniewski
pourquoi toutes ces copies !!!
Page 5: TP7 - perso.limsi.fr · Abbara Rachid L3cfa . return res; } @Override public Iterator < Integer > iterator {return this.iterator; } public void setIteratorOrder (boolean ascending

Abbara Rachid L3cfa

}