Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Nadi Tomeh
SDA
Commits
7cda7cc0
Commit
7cda7cc0
authored
Sep 30, 2019
by
david
Browse files
Replaced Java ArrayListProxy by homemade Arraylist
parent
be8e1c89
Changes
2
Hide whitespace changes
Inline
Side-by-side
Java/ArrayList
Proxy
.java
→
Java/ArrayList.java
View file @
7cda7cc0
import
java.util.Array
List
;
import
java.util.Array
s
;
/**
/**
Cette classe est un proxy pour les ArrayList, c'est à dire les tableaux dynamiques en Java.
Cette classe est un proxy pour les ArrayList, c'est à dire les tableaux dynamiques en Java.
On utilise cette classe afin d'avoir le contrôle sur la gestion de la mémoire.
On utilise cette classe afin d'avoir le contrôle sur la gestion de la mémoire.
*/
*/
public
class
ArrayList
Proxy
<
T
>
{
public
class
ArrayList
<
T
>
{
/**
/**
Constructeur de la classe des tableaux dynamiques.
Constructeur de la classe des tableaux dynamiques.
Complexité en temps/espace, pire et meilleur cas : O(1)
Complexité en temps/espace, pire et meilleur cas : O(1)
*/
*/
public
ArrayList
Proxy
()
{
public
ArrayList
()
{
this
.
capacity
=
4
;
this
.
capacity
=
4
;
this
.
data
=
new
ArrayList
<
T
>(
this
.
capacity
)
;
this
.
data
=
new
Object
[
this
.
capacity
]
;
}
}
/**
/**
...
@@ -24,12 +24,11 @@ public class ArrayListProxy<T> {
...
@@ -24,12 +24,11 @@ public class ArrayListProxy<T> {
@returns true si le tableau a été agrandit, false sinon
@returns true si le tableau a été agrandit, false sinon
*/
*/
boolean
append
(
T
x
){
boolean
append
(
T
x
){
boolean
memory_allocation
=
false
;
boolean
memory_allocation
=
do_we_need_to_enlarge_capacity
();
if
(
do_we_need_to_enlarge_capacity
()
){
if
(
memory_allocation
){
memory_allocation
=
true
;
enlarge_capacity
();
enlarge_capacity
();
}
}
data
.
add
(
x
)
;
data
[
size
++]
=
x
;
return
memory_allocation
;
return
memory_allocation
;
}
}
...
@@ -41,13 +40,11 @@ public class ArrayListProxy<T> {
...
@@ -41,13 +40,11 @@ public class ArrayListProxy<T> {
@returns true si le tableau a été réduit, false sinon
@returns true si le tableau a été réduit, false sinon
*/
*/
boolean
pop_back
(){
boolean
pop_back
(){
boolean
memory_reduction
=
false
;
boolean
memory_reduction
=
do_we_need_to_reduce_capacity
();
if
(!
data
.
isEmpty
()){
if
(
size
!=
0
){
if
(
do_we_need_to_reduce_capacity
()
){
if
(
memory_reduction
)
memory_reduction
=
true
;
reduce_capacity
();
reduce_capacity
();
size
--;
}
data
.
remove
(
data
.
size
()-
1
);
}
}
return
memory_reduction
;
return
memory_reduction
;
}
}
...
@@ -58,8 +55,9 @@ public class ArrayListProxy<T> {
...
@@ -58,8 +55,9 @@ public class ArrayListProxy<T> {
@param pos est la l'indice de la case on l'utilisateur veut connaître la valeur.
@param pos est la l'indice de la case on l'utilisateur veut connaître la valeur.
@returns la valeur située à la position donnée par l'utilisateur.
@returns la valeur située à la position donnée par l'utilisateur.
*/
*/
@SuppressWarnings
(
"unchecked"
)
T
get
(
int
pos
){
T
get
(
int
pos
){
return
data
.
get
(
pos
)
;
return
(
T
)
data
[
pos
]
;
}
}
/**
/**
...
@@ -68,7 +66,7 @@ public class ArrayListProxy<T> {
...
@@ -68,7 +66,7 @@ public class ArrayListProxy<T> {
@returns le nombre d'éléments stockés dans le tableau.
@returns le nombre d'éléments stockés dans le tableau.
*/
*/
int
size
(){
int
size
(){
return
data
.
size
()
;
return
size
;
}
}
/**
/**
...
@@ -85,15 +83,15 @@ public class ArrayListProxy<T> {
...
@@ -85,15 +83,15 @@ public class ArrayListProxy<T> {
@returns true si le tableau doit être agrandi, false sinon.
@returns true si le tableau doit être agrandi, false sinon.
*/
*/
private
boolean
do_we_need_to_enlarge_capacity
()
{
private
boolean
do_we_need_to_enlarge_capacity
()
{
return
data
.
size
()
>=
(
capacity
*
3
)/
4
;
return
size
>=
(
capacity
*
3
)/
4
;
}
}
/**
/**
Cette fonction augmente la capacité du tableau.
Cette fonction augmente la capacité du tableau.
*/
*/
private
void
enlarge_capacity
(){
private
void
enlarge_capacity
(){
capacity
*=
2
;
data
=
java
.
util
.
Arrays
.
copyOf
(
data
,
capacity
*
2
)
;
data
.
ensureCapacity
(
capacity
)
;
capacity
*=
2
;
}
}
/**
/**
...
@@ -101,19 +99,21 @@ public class ArrayListProxy<T> {
...
@@ -101,19 +99,21 @@ public class ArrayListProxy<T> {
@returns true si le tableau doit être réduit, false sinon.
@returns true si le tableau doit être réduit, false sinon.
*/
*/
private
boolean
do_we_need_to_reduce_capacity
(){
private
boolean
do_we_need_to_reduce_capacity
(){
return
data
.
size
()
<=
capacity
/
4
&&
data
.
size
()
>
4
;
return
size
<=
capacity
/
4
&&
size
>
4
;
}
}
/**
/**
Cette fonction reduit la capacité du tableau.
Cette fonction reduit la capacité du tableau.
*/
*/
void
reduce_capacity
(){
void
reduce_capacity
(){
capacity
/=
2
;
data
=
java
.
util
.
Arrays
.
copyOf
(
data
,
capacity
/
2
);
data
.
ensureCapacity
(
capacity
);
capacity
/=
2
;
}
}
// Tableau dynamique en Java. Sa capacité réelle est masquée, mais on peut avoir un contrôle dessus.
// Tableau dynamique en Java. Sa capacité réelle est masquée, mais on peut avoir un contrôle dessus.
private
ArrayList
<
T
>
data
;
private
Object
[]
data
;
// Capacité réelle du tableau data.
// Capacité réelle du tableau data.
private
int
capacity
;
private
int
capacity
;
// Nombre réel d'éléments dans le tableau.
private
int
size
;
}
}
Java/Main.java
View file @
7cda7cc0
...
@@ -5,13 +5,13 @@ public class Main {
...
@@ -5,13 +5,13 @@ public class Main {
public
static
void
main
(
String
[]
args
)
{
public
static
void
main
(
String
[]
args
)
{
int
i
,
time_ind
=
0
,
pop_ind
=
0
;
int
i
,
time_ind
=
0
,
pop_ind
=
0
;
// Tableau dynamique.
// Tableau dynamique.
ArrayList
Proxy
<
Integer
>
a
=
new
ArrayList
Proxy
<
Integer
>();
ArrayList
<
Integer
>
a
=
new
ArrayList
<
Integer
>();
// Analyse du temps pris par les opérations.
// Analyse du temps pris par les opérations.
Analyzer
time_analysis
=
new
Analyzer
();
Analyzer
time_analysis
=
new
Analyzer
();
// Analyse du nombre de copies faites par les opérations.
// Analyse du nombre de copies faites par les opérations.
Analyzer
copy_analysis
=
new
Analyzer
();
Analyzer
copy_analysis
=
new
Analyzer
();
// Analyse de l'espace mémoire inutilisé.
// Analyse de l'espace mémoire inutilisé.
Analyzer
memory_analysis
=
new
Analyzer
();
Analyzer
memory_analysis
=
new
Analyzer
();
long
before
,
after
;
long
before
,
after
;
// Booléen permettant de savoir si une allocation a été effectuée.
// Booléen permettant de savoir si une allocation a été effectuée.
boolean
memory_allocation
;
boolean
memory_allocation
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment