10. java lecture generics&collections1. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亠仗舒舒仄亠亳亰仂于舒仆仆亶 从仍舒:
public class Box
{
private Object object;
public void add(Object object)
{ this.object = object; }
public Object get()
{ return object; }
}
1
2. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亳弍从舒, 于磶舒仆仆舒 仂于亳亠仄 仗舒舒仄亠亳亰舒亳亳:
public class BoxDemo
{public static void main(String[ ] args)
{ Box integerBox = new Box();
integerBox.add("10");
...
Integer someInteger = (Integer)integerBox.get();
System.out.println(someInteger); }
}
2
3. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
Exception in thread "main"
java.lang.ClassCastException:
java.lang.String cannot be cast to java.lang.Integer
at BoxDemo.main(BoxDemo.java:6)
3
4. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
舒舒仄亠亳亰仂于舒仆仆亶 从仍舒 (generic type):
public class Box<T>
{ private T t; // T stands for "Type"
public void add(T t)
{ this.t = t; }
public T get()
{ return t; }
}
<T> - type variable, formal type parameter
4
5. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
弌仂亰亟舒仆亳亠 仂弍亠从舒 仗舒舒仄亠亳亰仂于舒仆仆仂亞仂 从仍舒舒
(generic type invocation):
Box<Integer> integerBox = new Box<Integer>();
public class BoxDemo
{public static void main(String[ ] args)
{ Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
Integer someInteger = integerBox.get(); //no cast!
integerBox.add("10"); }
}
5
6. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
BoxDemo3.java:5: add(java.lang.Integer) in
Box<java.lang.Integer> cannot be applied to
(java.lang.String) integerBox.add("10");
^
1 error
丐舒从亳仄 仂弍舒亰仂仄 于仄亠仂 亳从仍ム亠仆亳 (runtime error) 仗仂仍舒亠仄
compilation error !!!
6
7. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
舒舒仄亠亳亰仂于舒仆仆亶 从仍舒 仄仂亢亠 亳仄亠
仆亠从仂仍从仂 仗舒舒仄亠仂于, 仆仂 仂仆亳 亟仂仍亢仆
仂弍仂亰仆舒舒 舒亰仆仄亳 弍从于舒仄亳.
class Box <T, T> - error!
class Box <T,U> - ok!
7
8. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
舒舒仄亠亳亰仂于舒仆仆亠 仄亠仂亟
public class Box<T>
{ private T t;
public void add(T t)
{ this.t = t; }
public T get()
{ return t; }
public <U> void inspect(U u)
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }
}
8
9. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
舒舒仄亠亳亰仂于舒仆仆亠 仄亠仂亟
public static void main(String[ ] args)
{
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
integerBox.inspect("some text");
}
于仂亟:
T: java.lang.Integer
U: java.lang.String
9
10. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亞舒仆亳亠仆仆舒 仗舒舒仄亠亳亰舒亳
(bounded type parameters)
public <U extends Number> void inspect(U u)
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }
public static void main(String[ ] args)
{
Box<Integer> integerBox = new Box<Integer>();
integerBox.add(new Integer(10));
integerBox.inspect("some text"); //error!!!
}
10
11. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亞舒仆亳亠仆仆舒 仗舒舒仄亠亳亰舒亳
(bounded type parameters)
Extends 于 亟舒仆仆仂仄 仍舒亠 仗仂仆亳仄舒亠 亳 从舒从 extends 亳
从舒从 implements:
public <U extends Number & MyInterface> void inspect(U u)
{System.out.println("T: " + t.getClass().getName());
System.out.println("U: " + u.getClass().getName()); }
11
12. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
仂亟亳仗亳亰舒亳
Box<Number> box = new Box<Number>();
box.add(new Integer(10)); // OK
box.add(new Double(10.1)); // OK
public void boxTest (Box<Number> n)
{
}
12
13. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
仂亟亳仗亳亰舒亳
Box<Integer> IntegerBox = new Box<Integer>();
Box<Double> DoubleBox = new Box<Double>();
boxTest(IntegerBox );
//error!
boxTest(DoubleBox );
//error!
亳亳仆舒 仂亳弍从亳 - Box<Integer> 亳 Box<Double> 仆亠
磦仍ム 仗仂亟亳仗舒仄亳 Box<Number> !!!
13
14. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
Wildcards
Box<? extends Number> someBox = ...; //upper bound
Box<? super Number> someBox = ...;
Box<?> someBox = ...;
//lower bound
//unbounded wildcard
Box<? extends Object> someBox = ...;
//unbounded wildcard
Box<Integer> 亳 Box<Double> 仆亠 磦仍ム 仗仂亟亳仗舒仄亳
Box<Number>, 仆仂 磦仍ム 仗仂亟亳仗舒仄亳 Box<? extends Number>
14
15. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
Wildcards
Box<? extends Number> someBox = new Box<Number>();
Box<Integer> IntegerBox = new Box<Integer>();
Box<Double> DoubleBox = new Box<Double>();
someBox = IntegerBox;
someBox = DoubleBox;
15
16. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
Wildcards
public void boxTest (Box<? extends Number> n)
{
}
Box<Integer> IntegerBox = new Box<Integer>();
Box<Double> DoubleBox = new Box<Double>();
boxTest(IntegerBox );
//ok!
boxTest(DoubleBox );
//ok!
16
17. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亳从舒 亳仗舒 (Type erasure)
舒 舒仗亠 从仂仄仗亳仍亳亳 于 亳仆仂仄舒亳 仂
仗舒舒仄亠亳亰仂于舒仆仆 亳仗舒 亟舒仍磳.
亅仂 仗仂亰于仂仍磳 仂舒仆亳 仂于仄亠亳仄仂 仆舒
仂于仆亠 弍舒亶-从仂亟舒 仂弍仆仄亳 亳仗舒仄亳.
弌仍亠亟于亳亠: 仆亠仍亰 仗仂仍亳 亳仆仂仄舒亳 仂
仗舒舒仄亠亳亰仂于舒仆仆仂仄 亳仗亠 于仂 于亠仄 于仗仂仍仆亠仆亳.
17
18. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亳从舒 亳仗舒 (Type erasure)
public class MyClass<E> {
public void myMethod(Object item) {
if (item instanceof E)
{ ...
//Compiler error
}
E item2 = new E();
//Compiler error
E[ ] iArray = new E[10];
//Compiler error
E obj = (E)new Object(); //Unchecked cast warning }
}
18
19. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亳从舒 亳仗舒 (Type erasure)
public class WarningDemo
{
public static void main(String[ ] args)
{ Box<Integer> bi;
bi = createBox(); }
static Box createBox()
{ return new Box(); }
}
19
20. 舒舒仄亠亳亰舒亳 亳仗仂于 于 Java
亳从舒 亳仗舒 (Type erasure)
WarningDemo.java:4: warning: [unchecked] unchecked
conversion
found : Box
required: Box<java.lang.Integer>
bi = createBox();
^
1 warning
20
21. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 弌从舒 从仂仍仍亠从亳亶
仂仍仍亠从亳 仂 仂弍亠从-从仂仆亠亶仆亠, 于从仍ム舒ム亳亶 亞仗仗, 从舒从
仗舒于亳仍仂, 仂亟仆仂亳仗仆 仂弍亠从仂于. 弌从舒 从仂仍仍亠从亳亶
(collections framework) Java 舒仆亟舒亳亰亳亠 仗仂仂弍,
仗仂仄仂 从仂仂仂亞仂 于舒亳 仗仂亞舒仄仄 舒仆 亳 仂弍舒弍舒于舒ム
亞仗仗 仂弍亠从仂于.
弌从舒 从仂仍仍亠从亳亶
仆亠亠亶
亠舒仍亳亰舒亳亳
仍亞仂亳仄
21
22. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 弌从舒 从仂仍仍亠从亳亶
亠亳仄亠于舒 亳仗仂仍亰仂于舒仆亳 从 从仂仍仍亠从亳亶:
1. 亰弍舒于仍亠仆亳亠 仂 亳仆仆 仂仗亠舒亳亶 仗仂 从仂亟亳仂于舒仆亳
舒仆亟舒仆 从 亟舒仆仆 亳 舒仍亞仂亳仄仂于
2. 仂从舒 亠从亳于仆仂 亠舒仍亳亰舒亳亳
3. 丕仆亳于亠舒仍仆仂 亳 仗仂仂舒 亳亰亠仆亳(舒亰仍亳仆亠
亳仗 从仂仍仍亠从亳亶 舒弍仂舒ム 仗仂仂亢亳仄 亟亞 仆舒 亟亞舒
仂弍舒亰仂仄 亳 于仂从仂亶 亠仗亠仆 仗仂仂弍仆仂亳 从
于亰舒亳仄仂亟亠亶于亳)
4. 舒亳磳仄仂
弌从舒 从仂仍仍亠从亳亶 仆舒仂亟亳 于 仗舒从亠亠 java.util.*
22
24. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Collection
仂亠仆 亳亠舒亳亳. 舒亟舒亠 舒仄亠 仂弍亳亠 仄亠仂亟 亟仍
舒弍仂 从仂仍仍亠从亳礆亳.
public interface Collection<E> extends Iterable<E>
{ int size();
boolean isEmpty();
boolean contains(Object element);
boolean add(E element);
boolean remove(Object element);
Iterator<E> iterator();
24
25. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Collection
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? extends E> c);
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
void clear();
Object[ ] toArray();
}
25
26. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 亠亠仄亠亠仆亳亠 仗仂
从仂仍仍亠从亳亳
1. For-each
for (Object o : collection)
System.out.println(o);
2. public interface Iterator<E>
{
boolean hasNext();
E next();
void remove();
}
26
27. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 亠亠仄亠亠仆亳亠 仗仂
从仂仍仍亠从亳亳
Collection <String> cs = new ArrayList<String>();
cs.add("1");
cs.add("2");
cs.add("3");
for (String str : cs)
System.out.println(str);
27
28. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 亠亠仄亠亠仆亳亠 仗仂
从仂仍仍亠从亳亳
Collection <String> cs = new ArrayList<String>();
cs.add("1");
cs.add("2");
cs.add("3");
Iterator it = cs.iterator();
while(it.hasNext())
System.out.println(it.next());
28
29. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 亠亠仄亠亠仆亳亠 仗仂
从仂仍仍亠从亳亳
亠仂亟 remove() 仄仂亢亠 弍 于亰于舒仆 仂仍从仂 仂亟亳仆 舒亰
仗仂仍亠 于亰仂于舒 仄亠仂亟 next(), 亳仆舒亠 弍仂舒亠 亳从仍ム亠仆亳亠.
亠仂亟 remove() 亠亟亳仆于亠仆仆亶 弍亠亰仂仗舒仆亶 仗仂仂弍
仄仂亟亳亳从舒亳亳 从仂仍仍亠从亳亳.
static void filter(Collection<?> c) {
for (Iterator<?> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
29
30. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Set
Set 从仂仍仍亠从亳 弍亠亰 仗仂于仂ム亳 仍亠仄亠仆仂于
(仄舒亠仄舒亳亠从仂亠 仄仆仂亢亠于仂). 亠仂亟
仂于仗舒亟舒ム Collection 仆仂 add() 于亠仆亠 false,
亠仍亳 仍亠仄亠仆 亢亠 亠 于 从仂仍仍亠从亳亳.
30
31. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Set
import java.util.*;
public class FindDups {
public static void main(String[ ] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
if (!s.add(a))
System.out.println("Duplicate detected: " + a);
System.out.println(s.size() + " distinct words: " + s);
}
}
31
32. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedSet
仆亠亠亶 SortedSet 亳亰 仗舒从亠舒 java.util,
舒亳ム亳亶 亳仆亠亠亶 Set, 仂仗亳于舒亠
仗仂磲仂亠仆仆仂亠 仄仆仂亢亠于仂, 仂仂亳仂于舒仆仆仂亠
仗仂 亠亠于亠仆仆仂仄 仗仂磲从 于仂亰舒舒仆亳 亠亞仂
仍亠仄亠仆仂于 亳仍亳 仗仂 仗仂磲从, 亰舒亟舒仆仆仂仄
亠舒仍亳亰舒亳亠亶 亳仆亠亠亶舒 Comparator.
亅仍亠仄亠仆 仆亠 仆仄亠ム, 仆仂 亠 仗仂仆亳亠
仗亠于仂亞仂, 仗仂仍亠亟仆亠亞仂, 弍仂仍亠亞仂 亳 仄亠仆亠亞仂
仍亠仄亠仆舒.
32
33. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedSet
Comparator Comparator() 于仂亰于舒舒亠 仗仂仂弍
仗仂磲仂亠仆亳 从仂仍仍亠从亳亳;
Object first () 于仂亰于舒舒亠 仗亠于亶, 仄亠仆亳亶
仍亠仄亠仆 从仂仍仍亠从亳亳;
Object last() 于仂亰于舒舒亠 仗仂仍亠亟仆亳亶,
弍仂仍亳亶 仍亠仄亠仆 从仂仍仍亠从亳亳;
33
34. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedSet
SortedSet headSet (Object toElement)
于仂亰于舒舒亠 仆舒舒仍仆亠, 仄亠仆亳亠 仍亠仄亠仆
亟仂 仍亠仄亠仆舒 toElement 亳从仍ム亳亠仍仆仂;
SortedSet subSet(Object fromElement, Object
toElement) 于仂亰于舒舒亠 仗仂亟仄仆仂亢亠于仂
从仂仍仍亠从亳亳 仂 仍亠仄亠仆舒 fromElement
于从仍ム亳亠仍仆仂 亟仂 仍亠仄亠仆舒 toElement
亳从仍ム亳亠仍仆仂;
SortedSet tailSet (Object fromElement)
于仂亰于舒舒亠 仗仂仍亠亟仆亳亠, 弍仂仍亳亠 仍亠仄亠仆
从仂仍仍亠从亳亳 仂 仍亠仄亠仆舒 fromElement
于从仍ム亳亠仍仆仂.
34
35. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Comparator
int compare (Object obj1, object obj2)
于仂亰于舒舒亠 仂亳舒亠仍仆仂亠 亳仍仂, 亠仍亳 obj1 于
从舒从仂仄-仂 仄仍亠 仄亠仆亠 obj2; 仆仍, 亠仍亳 仂仆亳
亳舒ム 舒于仆仄亳; 仗仂仍仂亢亳亠仍仆仂亠 亳仍仂,
亠仍亳 objl 弍仂仍亠 obj2. 弌 仂从亳 亰亠仆亳 亠仂亳亳
仄仆仂亢亠于 仄仂亢仆仂 从舒亰舒, 仂 仂 仄亠仂亟
舒于仆亠仆亳 仂弍仍舒亟舒亠 于仂亶于舒仄亳 仂亢亟亠于舒,
舒仆亳亳仄仄亠亳仆仂亳 亳 舒仆亰亳亳于仆仂亳;
boolean equals (Object obj) 舒于仆亳于舒亠
亟舒仆仆亶 仂弍亠从 仂弍亠从仂仄 obj, 于仂亰于舒舒 true,
亠仍亳 仂弍亠从 仂于仗舒亟舒ム 于 从舒从仂仄-仍亳弍仂 仄仍亠,
亰舒亟舒仆仆仂仄 亳仄 仄亠仂亟仂仄.
35
36. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Comparator
class ComplexCompare implements Comparator
{public int compare(Object obj1, Object obj2)
{Complex z1 = (Complex)obj1, z2 = (Complex)obj2;
double re1 = z1.getRe(), im1 = z1.getlm();
double re2 = z2.getRe(), im2 = z2.getlm();
if (re1 != re2) return (int)(re1 - re2);
else if (im1 != im2) return (int)(im1 im2) ;
else return 0;}
public boolean equals(Object z)
{return compare (this, z) == 0;}
}
36
37. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Comparator
TreeSet ts = new TreeSet(new ComplexCompare());
ts.add(new Complex(1.2, 3.4));
ts.add(new Complex(-1.25, 33.4));
ts.add(new Complex(1.23, -3.45));
ts.add(new Complex(16.2, 23.4));
Iterator it = ts.iterator();
while(it.hasNext())
((Complex)it.next()).print();
37
38. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 List
仆亠亠亶 List 亳亰 仗舒从亠舒 java.util,
舒亳ム亳亶 亳仆亠亠亶 Collection,
仂仗亳于舒亠 仄亠仂亟 舒弍仂 仗仂磲仂亠仆仆仄亳
从仂仍仍亠从亳礆亳. 仆仂亞亟舒 亳 仆舒亰于舒ム
仗仂仍亠亟仂于舒亠仍仆仂礆亳 (sequence). 亅仍亠仄亠仆
舒从仂亶 从仂仍仍亠从亳亳 仗仂仆仄亠仂于舒仆, 仆舒亳仆舒 仂
仆仍, 从 仆亳仄 仄仂亢仆仂 仂弍舒亳 仗仂 亳仆亟亠从.
仂仍亳亳亠 仂 从仂仍仍亠从亳亳 Set 仍亠仄亠仆 从仂仍仍亠从亳亳
List 仄仂亞 仗仂于仂.
38
39. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 List
void add(int index, Object obj) 于舒于仍磳
仍亠仄亠仆 obj 于 仗仂亰亳亳 index; 舒亠 仍亠仄亠仆,
仆舒亳仆舒 仗仂亰亳亳亳 index, 亟于亳亞舒ム, 亳
亳仆亟亠从 于亠仍亳亳于舒ム 仆舒 亠亟亳仆亳;
boolean addAll(int index, Collection coll)
于舒于仍磳 于亠 仍亠仄亠仆 从仂仍仍亠从亳亳 coll;
Object get(int index) - 于仂亰于舒舒亠 仍亠仄亠仆,
仆舒仂亟亳亶 于 仗仂亰亳亳亳 index;
int indexOf (Object obj) 于仂亰于舒舒亠 亳仆亟亠从
仗亠于仂亞仂 仗仂磦仍亠仆亳 仍亠仄亠仆舒 obj 于 从仂仍仍亠从亳亳;
39
40. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 List
int lastIndexOf (Object obj) 于仂亰于舒舒亠 亳仆亟亠从
仗仂仍亠亟仆亠亞仂 仗仂磦仍亠仆亳 仍亠仄亠仆舒 obj 于 从仂仍仍亠从亳亳;
ListIterator listIterator() 于仂亰于舒舒亠 亳亠舒仂
从仂仍仍亠从亳亳;
ListIterator listIterator (int index) 于仂亰于舒舒亠
亳亠舒仂 从仂仆舒 从仂仍仍亠从亳亳 仂 仗仂亰亳亳亳 index;
Object set (int index, Object obj) 亰舒仄亠仆磳
仍亠仄亠仆, 仆舒仂亟亳亶 于 仗仂亰亳亳亳 index,
仍亠仄亠仆仂仄 obj;
List subList(int from, int to) 于仂亰于舒舒亠 舒
从仂仍仍亠从亳亳 仂 仗仂亰亳亳亳 from 于从仍ム亳亠仍仆仂 亟仂
仗仂亰亳亳亳 to 亳从仍ム亳亠仍仆仂.
40
41. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 ListIterator
void add(Object element) 亟仂弍舒于仍磳 仍亠仄亠仆
element 仗亠亠亟 亠从亳仄 仍亠仄亠仆仂仄;
boolean hasPrevious() 于仂亰于舒舒亠 true, 亠仍亳 于
从仂仍仍亠从亳亳 亠 仍亠仄亠仆, 仂亳亠 仗亠亠亟
亠从亳仄 仍亠仄亠仆仂仄;
int nextIndex() 于仂亰于舒舒亠 亳仆亟亠从 亠从亠亞仂
仍亠仄亠仆舒; 亠仍亳 亠从亳仄 磦仍磳 仗仂仍亠亟仆亳亶
仍亠仄亠仆 从仂仍仍亠从亳亳, 于仂亰于舒舒亠 舒亰仄亠
从仂仍仍亠从亳亳;
41
42. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 ListIterator
Object previous() 于仂亰于舒舒亠 仗亠亟亟亳亶
仍亠仄亠仆 亳 亟亠仍舒亠 亠亞仂 亠从亳仄;
int previousIndex() 于仂亰于舒舒亠 亳仆亟亠从
仗亠亟亟亠亞仂 仍亠仄亠仆舒;
void set(Object element) 亰舒仄亠仆磳 亠从亳亶
仍亠仄亠仆 仍亠仄亠仆仂仄 element; 于仗仂仍仆磳
舒亰 仗仂仍亠 next() 亳仍亳 previous().
42
43. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Map
仆亠亠亶 Map 亳亰 仗舒从亠舒 java.util 仂仗亳于舒亠
从仂仍仍亠从亳, 仂仂 亳亰 仗舒 "从仍ム 亰仆舒亠仆亳亠".
丕 从舒亢亟仂亞仂 从仍ム舒 仂仍从仂 仂亟仆仂 亰仆舒亠仆亳亠, 仂
仂仂于亠于亠 仄舒亠仄舒亳亠从仂仄 仗仂仆亳
仂亟仆仂亰仆舒仆仂亶 仆从亳亳 亳仍亳 仂仂弍舒亢亠仆亳. 丐舒从
从仂仍仍亠从亳 舒仂 仆舒亰于舒ム 亠亠 仍仂于舒亠仄
(dictionary) 亳仍亳 舒仂亳舒亳于仆仄 仄舒亳于仂仄
(associative array).
43
44. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Map
boolean containsKey (Object key) 仂于亠磳
仆舒仍亳亳亠 从仍ム舒 key;
boolean containsValue (Object value)
仂于亠磳 仆舒仍亳亳亠 亰仆舒亠仆亳 value;
Set entrySet() 仗亠亟舒于仍磳 从仂仍仍亠从亳 于
于亳亟亠 仄仆仂亢亠于舒, 从舒亢亟亶 仍亠仄亠仆 从仂仂仂亞仂
仗舒舒 亳亰 亟舒仆仆仂亞仂 仂仂弍舒亢亠仆亳, 从仂仂仂亶 仄仂亢仆仂
舒弍仂舒 仄亠仂亟舒仄亳 于仍仂亢亠仆仆仂亞仂 亳仆亠亠亶舒
Map.Entry;
Object get(Object key) - 于仂亰于舒舒亠 亰仆舒亠仆亳亠,
仂于亠舒ム亠亠 从仍ム key;
44
45. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Map
Set keySet() 仗亠亟舒于仍磳 从仍ム亳 从仂仍仍亠从亳亳 于
于亳亟亠 仄仆仂亢亠于舒;
Object put (Object key, Object value) 亟仂弍舒于仍磳
仗舒 "key value", 亠仍亳 舒从仂亶 仗舒 仆亠 弍仍仂, 亳
亰舒仄亠仆磳 亰仆舒亠仆亳亠 从仍ム舒 key, 亠仍亳 舒从仂亶 从仍ム
亢亠 亠 于 从仂仍仍亠从亳亳;
void putAll (Map m) 亟仂弍舒于仍磳 从 从仂仍仍亠从亳亳
于亠 仗舒 亳亰 仂仂弍舒亢亠仆亳 m;
Collection values() 仗亠亟舒于仍磳 于亠 亰仆舒亠仆亳
于 于亳亟亠 从仂仍仍亠从亳亳.
45
46. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 Map.Entry
仄亠仂亟 getKey() 亳 getValue() 仗仂亰于仂仍ム
仗仂仍亳 从仍ム 亳 亰仆舒亠仆亳亠 仗舒;
仄亠仂亟 setValue (Object value) 仄亠仆磳 亰仆舒亠仆亳亠 于
亟舒仆仆仂亶 仗舒亠.
for (Iterator it=map.entrySet().iterator(); it.hasNext(); )
{
Map.Entry entry = (Map.Entry)it.next();
Object key = entry.getKey();
Object value = entry.getValue();
}
46
47. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedMap
仆亠亠亶 SortedMap, 舒亳ム亳亶 亳仆亠亠亶
Map, 仂仗亳于舒亠 仗仂磲仂亠仆仆 仗仂 从仍ム舒仄
从仂仍仍亠从亳 Map. 弌仂亳仂于从舒 仗仂亳亰于仂亟亳 仍亳弍仂 于
亠亠于亠仆仆仂仄 仗仂磲从亠 于仂亰舒舒仆亳 从仍ム亠亶, 仍亳弍仂
于 仗仂磲从亠, 仂仗亳于舒亠仄仂仄 于 亳仆亠亠亶亠
Comparator.
47
48. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedMap
Comparator comparator() 于仂亰于舒舒亠 仗仂仂弍
仗仂磲仂亠仆亳 从仂仍仍亠从亳亳;
Object firstKey() 于仂亰于舒舒亠 仗亠于亶,
仄亠仆亳亶 仍亠仄亠仆 从仂仍仍亠从亳亳;
SortedMap headMap (Object toKey)
仂亰于舒舒亠 仆舒舒仍仂 从仂仍仍亠从亳亳 亟仂 仍亠仄亠仆舒
从仍ム仂仄 toK亠 亳从仍ム亳亠仍仆仂;
Object lastKey() 于仂亰于舒舒亠 仗仂仍亠亟仆亳亶,
弍仂仍亳亶 从仍ム 从仂仍仍亠从亳亳;
48
49. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仆亠亠亶 SortedMap
SortedMap subMap (Object fromKey, Object
toKey) 于仂亰于舒舒亠 舒 从仂仍仍亠从亳亳 仂
仍亠仄亠仆舒 从仍ム仂仄 fromKey 于从仍ム亳亠仍仆仂 亟仂
仍亠仄亠仆舒 从仍ム仂仄 toKey 亳从仍ム亳亠仍仆仂;
SortedMap tailMap(Object fromKey)
于仂亰于舒舒亠 仂舒仂从 从仂仍仍亠从亳亳 仂 仍亠仄亠仆舒
fromKey 于从仍ム亳亠仍仆仂.
49
51. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 亠舒仍亳亰舒亳亳
General-purpose Implementations
Interfaces
Implementations
Hashtable
Set
HashSet
List
Map
Resizable
array
Tree
TreeSet
Hash table +
Linked list
LinkedHashSet
Linked
List
ArrayList
HashMap
Linked
list
TreeMap
LinkedHashMap
51
52. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄 仂亳仂于从亳
弌仂亳仂于从舒 仄仂亢亠 弍 亟亠仍舒仆舒 仂仍从仂 于
仗仂磲仂亳于舒亠仄仂亶 从仂仍仍亠从亳亳, 亠舒仍亳亰ム亠亶
亳仆亠亠亶 List. 亠仂亟:
static void sort (List coll) 仂亳亠 于
亠亠于亠仆仆仂仄 仗仂磲从亠 于仂亰舒舒仆亳
从仂仍仍亠从亳 coll, 亠舒仍亳亰ム 亳仆亠亠亶 List;
static void sort (List coll, Comparator )
仂亳亠 从仂仍仍亠从亳 coll 于 仗仂磲从亠,
亰舒亟舒仆仆仂仄 仂弍亠从仂仄 .
52
53. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄 仂亳仂于从亳
弌仂亳仂于从舒 磦仍磳 弍仂亶 亳 舒弍亳仍仆仂亶:
1) 亞舒舒仆亳仂于舒仆舒 从仂仂 仆亠 仆亳亢亠 n*log(n)
2) 舒于仆亠 仍亠仄亠仆 仆亠 仗亠亠仗仂磲仂亳于舒ム
public class Sort {
public static void main(String[ ] args) {
List<String> list = Arrays.asList(args);
Collections.sort(list);
System.out.println(list);
}
}
53
54. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄 仗仂亳从舒
static int binarySearch(List coll, Object element)
仂从亳于舒亠 仍亠仄亠仆 element 于
仂仂亳仂于舒仆仆仂亶 于 亠亠于亠仆仆仂仄 仗仂磲从亠
于仂亰舒舒仆亳 从仂仍仍亠从亳亳 coll 亳 于仂亰于舒舒亠
亳仆亟亠从 仍亠仄亠仆舒 亳仍亳 仂亳舒亠仍仆仂亠 亳仍仂,
亠仍亳 仍亠仄亠仆 仆亠 仆舒亶亟亠仆; 仂亳舒亠仍仆仂亠
亳仍仂 仗仂从舒亰于舒亠 亳仆亟亠从, 从仂仂仄 仍亠仄亠仆
element 弍仍 弍 于舒于仍亠仆 于 从仂仍仍亠从亳,
仂弍舒仆仄 亰仆舒从仂仄;
static int binarySearch(List coll, Object element.
Comparator ) 仂 亢亠, 仆仂 从仂仍仍亠从亳
仂仂亳仂于舒仆舒 于 仗仂磲从亠, 仂仗亠亟亠仍亠仆仆仂仄
仂弍亠从仂仄 .
54
55. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄
束仗亠亠仄亠亳于舒仆亳晛
static void shuffle (List coll) 仍舒亶仆亠
亳仍舒 亰舒亟舒ム 仗仂 仄仂仍舒仆亳;
static void shuffle (List coll, Random r)
仍舒亶仆亠 亳仍舒 仂仗亠亟亠仍ム 仂弍亠从仂仄 r.
55
56. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄
仄舒仆亳仗仍亳亳 亟舒仆仆仄亳
-
static void reverse(List coll) 仄亠仆磳 仗仂磲仂从
舒仗仂仍仂亢亠仆亳 仍亠仄亠仆仂于 仆舒 仂弍舒仆亶.
-
static void copy(List from, List to) 从仂仗亳亠
从仂仍仍亠从亳 from 于 从仂仍仍亠从亳 to.
-
static void fill(List coll, Object element) 亰舒仄亠仆磳
于亠 仍亠仄亠仆 亠于ム亠亶 从仂仍仍亠从亳亳 coll
仍亠仄亠仆仂仄 element.
-
static void swap(List coll, int i1, int i2) 仄亠仆磳
仄亠舒仄亳 仍亠仄亠仆
56
57. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄
从亠仄仄仂于
-
static Object max (Collection coll) 于仂亰于舒舒亠
仆舒亳弍仂仍亳亶 于 亠亠于亠仆仆仂仄 仗仂磲从亠 仍亠仄亠仆
从仂仍仍亠从亳亳 coll;
-
static Object max (Collection coll, Comparator c)
仂 亢亠 于 仗仂磲从亠, 亰舒亟舒仆仆仂仄 仂弍亠从仂仄 ;
-
static Object min (Collection coll) 于仂亰于舒舒亠
仆舒亳仄亠仆亳亶 于 亠亠于亠仆仆仂仄 仗仂磲从亠 仍亠仄亠仆
从仂仍仍亠从亳亳 coll;
-
static Object min (Collection coil, Comparator c)
仂 亢亠 于 仗仂磲从亠, 亰舒亟舒仆仆仂仄 仂弍亠从仂仄 .
57
58. 亳弍仍亳仂亠从舒 从仍舒仂于 Java
仂仍仍亠从亳亳. 仍亞仂亳仄
仂弍亠亟亳仆亠仆亳
-
static int frequency(Collection coll, Object
element) 亳舒亠 从仂仍-于仂 仗仂磦仍亠仆亳亶
从舒亰舒仆仆仂亞仂 仍亠仄亠仆舒 于 从仂仍仍亠从亳亳
-
static boolean disjoint(Collection coll1,
Collections coll2) 仂仗亠亟亠仍磳 仗亠亠亠从舒ム
仍亳 亟于亠 从仂仍仍亠从亳亳 (于仂亰于舒舒亠 true, 亠仍亳 仆亠
仗亠亠亠从舒ム)
58