PDF de programación - Colecciones

Imágen de pdf Colecciones

Coleccionesgráfica de visualizaciones

Publicado el 26 de Febrero del 2017
914 visualizaciones desde el 26 de Febrero del 2017
242,3 KB
29 paginas
Creado hace 17a (23/04/2007)
Colecciones

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y Computación

Universidad Complutense de Madrid

23 de abril de 2007

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Jerarquía de clases de colecciones

List

Collection

Set

SortedSet

AbstractCollection

AbstractList

AbstractSet

AbstractSequentialList

ArrayList

Vector

HashSet

TreeSet

LinkedList

Stack

Cloneable

Serializable

RandomAccess

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Colecciones

Collection Grupo de objetos.

Set Concepto matemático. El orden no importa, no hay

repeticiones. SortedSet.

List El orden es importante, admite repeticiones.

Map Concepto de función matemática. SortedMap

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Jerarquía de clases: Map

Map

SortedMap

AbstractMap

HashMap

IdentityHashMap



WeakHashMap



TreeMap

LinkedHashMap

Cloneable

Serializable

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Interfaz Collection

public i n t e r f a c e Collection <E > e x t e n d s Iterable <E > {

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
b o o l e a n add ( E e l e m e n t );
Iterator <E > i t e r a t o r ();
. . . . . . . . . . . . . . . . . . . . . . . . . .
Object [] t o A r r a y ();
<T > T [] t o A r r a y ( T [] a );

}

1
2
3
4
5
6
7
8

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Interface Iterador

public I n t e r f a c e I t e r a t o r {
public b o o l e a n h a s N e x t ();
public Object next ();
void

remove ();

}

1
2
3
4
5

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Uso de listas

p r i v a t e static List l e e P u n t o s ( String f i c h e r o )

throws F i l e N o t F o u n d E x c e p t i o n , I O E x c e p t i o n {

B u f f e r e d R e a d e r lector = new B u f f e r e d R e a d e r ( new F i l e R e a d e r ( f i c h e r o ));
List l i s t a P u n t o s = new L i n k e d L i s t ();
String datos = lector . r e a d L i n e ();
while ( datos != null ){

Punto p = new Punto ( datos );
l i s t a P u n t o s . add ( p );
datos = lector . r e a d L i n e ();

}
return l i s t a P u n t o s ;

}

p r i v a t e static void a n a l i z a L i s t a P u n t o s ( List c ){

I t e r a t o r itr = c . i t e r a t o r ();
int i =1;
while ( itr . h a s N e x t ()){

Punto p = ( Punto ) itr . next ();
. . . . . . . . . . . . . . . . . . . . . . . . . . .

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13

1
2
3
4
5
6
7
8

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Errores en tiempo de ejecución

¿Qué pasaría si añadiera un objeto que no sea de clase Punto?

Lista lista = l e e P u n t o s ( f i c h e r o );
lista . add ( new Recta ( new Punto (0 ,0) , new Punto (1 ,0)));
a n a l i z a P u n t o s ( lista );

La línea

Punto p = ( Punto ) itr . next ();

lanzaría un java.lang.ClassCastException.

1
2
3

1

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Clases genéricas

public I n t e r f a c e List <E > {

......
public Iterator <E > i t e r a t o r ()
.....

}

public I n t e r f a c e Iterator <E > {

public b o o l e a n h a s N e x t ();
public E next ();
void

remove ();

}

1
2
3
4
5

1
2
3
4
5

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Uso de listas con genéricos

p r i v a t e static List < Punto > l e e P u n t o s ( String f i c h e r o )

throws F i l e N o t F o u n d E x c e p t i o n , I O E x c e p t i o n {

B u f f e r e d R e a d e r lector = new B u f f e r e d R e a d e r ( new F i l e R e a d e r ( f i c h e r o ));
List < Punto > l i s t a P u n t o s = new LinkedList < Punto >();
String datos = lector . r e a d L i n e ();
while ( datos != null ){

Punto p = new Punto ( datos );
l i s t a P u n t o s . add ( p );
datos = lector . r e a d L i n e ();

}
return l i s t a P u n t o s ;

}

p r i v a t e static void a n a l i z a L i s t a P u n t o s ( List < Punto > c ){

Iterator < Punto > itr = c . i t e r a t o r ();
int i =1;
while ( itr . h a s N e x t ()){

Punto p = itr . next ();
. . . . . . . . . . . . . . . . . . . . . . . . . . .

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13

1
2
3
4
5
6
7
8

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Errores en tiempo de compilación

¿Qué pasaría si añadiera un objeto que no sea de clase Punto?

Lista < Punto > lista = l e e P u n t o s ( f i c h e r o );
lista . add ( new Recta ( new Punto (0 ,0) , new Punto (1 ,0)));

1
2

No compila, la lista es de puntos y puedo añadir rectas.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Interfaz Collection

public i n t e r f a c e Collection <E > e x t e n d s Iterable <E > {

int size ();
b o o l e a n i s E m p t y ();
b o o l e a n c o n t a i n s ( Object e l e m e n t );
b o o l e a n add ( E e l e m e n t );
b o o l e a n remove ( Object e l e m e n t );
Iterator <E > i t e r a t o r ();

b o o l e a n c o n t a i n s A l l ( Collection <? > c );
b o o l e a n addAll ( Collection <? e x t e n d s E > c );
b o o l e a n r e m o v e A l l ( Collection <? > c );
b o o l e a n r e t a i n A l l ( Collection <? > c );
void clear ();

Object [] t o A r r a y ();
<T > T [] t o A r r a y ( T [] a );

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Los métodos contains y remove comparan los objetos según el
método equals.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Interfaz Set

No añade métodos.

No puede haber elementos repetidos.

Subclases

HashSet La mejor en eficiencia, los iteradores no garantizan el

orden. Método hashCode en la clase Object.

TreeSet Implementación con árboles roji-negros. Los

iteradores recorren el conjunto según el orden
establecido por sus elementos

LinkedHashSet Otra implementación de las tablas hash.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Método equals

Definido en la clase Object. Hay que sobreescribirlo si se va a usar
una clase como elemento de una colección.

Debe ser una relación de orden: o1!=null, o2!=null y
o3!=null

Reflexivo o1.equals(o1)
Simétrico o1.equals(e2)==o2.equals(e1)
Si o1.equals(o2) y o2.equals(o3) entonces
o1.equals(o3)

Si o!=null entonces o.equals(null)==false.

Debe ser consistente: distintas invocaciones a lo largo de un
programa debe dar el mismo resultado si no cambian el valor
de los objetos.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Método hashCode

Definido en la clase Object. Hay que sobreescribirlo si se va a usar
una clase como elemento de una colección tipo hash.

Debe ser consistente.

Si o1.equals(o2), entonces o1.hashCode()=o2.hashCode.

No debe ser necesariamente inyectiva, dos objetos distintos
pueden tener el mismo valor.

Debería distribuir uniformemente los objetos.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Método CompareTo

public class Fecha i m p l e m e n t s Comparable < Fecha > , C l o n e a b l e {

. . . . . . . . . . . . . . . .
public int c o m p a r e T o ( Fecha f ) {

....

}
. . . . . . . . . .

}

Implementa relación de orden

1
2
3
4
5
6
7

x .compareTo

< 0 si x < y
= 0 si x = y
> 0 si x > y




Debe ser implementada para tener colecciones ordenadas.

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

Método CompareTo

sgn(x.compareTo(y)) == -sgn(y.compareTo(x)).
Debe ser reflexiva antisimétrica y transitiva, para objetos no
nulos

si x.compareTo(x)==0.
si x.compareTo(y)<=0 y y.compareTo(x)<=0 entonces
x.compareTo(z)==0 y z.compareTo(x)==0.
si x.compareTo(y)<=0 y y.compareTo(z)<=0 entonces
x.compareTo(z)<=0.

Debe ser consistente con el resto de los objetos. Si
x.compareTo(y)==0 entonces para todo z entonces
sgn(x.compareTo(z)) == sgn(y.compareTo(z)).

es conveniente que sea consistente con equals: x.equals(y)
sii x.compareTo(y)==0

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

PrColeccion

public class P r C o l e c c i o n {

public static void lee ( String nombre , Collection < String > c o n j u n t o )

throws I O E x c e p t i o n {
B u f f e r e d R e a d e r reader = null ;
try {

reader = new B u f f e r e d R e a d e r ( new F i l e R e a d e r ( nombre ));
String linea = reader . r e a d L i n e ();
while ( linea != null ) {

c o n j u n t o . add ( linea );
linea = reader . r e a d L i n e ();

}

} f i n a l l y {

if ( reader != null ) {
reader . close ();

}

}

}
public static void m u e s t r a ( Collection < String > c o n j u n t o ) {

for ( String s : c o n j u n t o ) {

System . out . p r i n t l n ( s );

}

}

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Luis Fernando Llana Díaz

Departamento de Sistemas Informáticos y ComputaciónUniversidad Complutense de Madrid

Colecciones

PrConjunto

public class P r C o n j u n t o {

public static void main ( String [] args ) throws E x c e p t
  • Links de descarga
http://lwp-l.com/pdf2468

Comentarios de: Colecciones (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad