Академический Документы
Профессиональный Документы
Культура Документы
Cc lp c s v cc cu trc d liu
Chng ny cp n: Cu trc mng trong Java; Cc lp c s ca Java trong gi java.lang: Object, Wrapper, Math, String v StringBuffer; Mt s cu trc d liu ph dng: Cc giao din Collection, Set, List, Map, SortedSet, SortedMap v mt s lp ci t chng.
Lu :
Kch thc ca mng cha xc nh khi khai bo,
- 115 -
iu quan trng cn phn bit trong cu trc mng ca Java l vic khai bo bin mng th cha hon ton to ra cu trc m mi khai bo cu trc tham chiu. V d: int mangInt[], bienInt; BongDen[] dayBong, hangBong; // (1) // (2)
Bin mng mangInt c khai bo theo kiu cc phn t l int (kiu nguyn thy), hai bin mng dayBong, hangBong c khai bo vi cc phn t c kiu tham chiu lp BongDen ( chng V).
Lu : Khi k hiu [] ng ngay sau kiu khai bo th tt c cc bin ng sau u l bin mng, v d (2), dayBong v hangBong ng sau BongDen[] u l bin
mng.
To lp i tng mng
to lp i tng mng th phi xc nh s phn t ca mng v phi s dng ton t new. <Tn mng> = new <Kiu cc phn t >[<S phn t>]; Trong <Kiu cc phn t> l kiu tng thch vi kiu m mng khai bo. Gi tr cc tiu ca <S phn t> l 0, ngha l trong Java c th to ra mng 0 phn t. Cc bin mng khai bo (1), (2) c th c to lp nh sau: mangInt = new int[100]; // Mng 100 phn t kiu int (3) dayBong = new BongDen[10];// Mng 10 i tng ca BongDen (4) hangBong = new BongDen[15];// Mng 15 i tng ca BongDen Nhiu khi chng ta c th kt hp c khai bo vi to lp mng nh sau: <Kiu cc phn t 1> <Tn mng>[] = new <Kiu cc phn t 2>[<S phn t>]; Khai bo v to lp mng <Tn mng> kiu <Kiu cc phn t 1> cha <S phn t> cc phn t c <Kiu cc phn t 2>.
Lu :
<Kiu cc phn t 1> v <Kiu cc phn t 2> l hai kiu tng thch vi nhau. Nu mng c kiu nguyn thy th hai kiu phi trng nhau. Ngc li, i vi kiu lp th <Kiu cc phn t 2> phi l lp con ca <Kiu cc phn t 1>. Tt nhin mt lp cng c xem l lp con ca chnh n. Khi mt mng c to lp th tt c cc phn t ca n c khi to gi tr mc nh (0 hoc 0.0 i vi kiu s, false i vi kiu boolean, null cho kiu lp). V d: float mangFloat[] = new float[20]; // Cc phn t c gn tr mc nh 0.0 Object[] dayDen = new BongDen[5]; - 116 -
// Cc phn t c gn mc nh null
Khi to cc mng
Java cung cp c ch cho php khai bo, to lp v gn ngay cc gi tr ban u cho cc phn t ca mng: <Kiu cc phn t >[] <Tn mng> = {<Cc gi tr ban u>}; V d: int[] mangInt = {1, 3, 5, 7, 9}; To ra mangInt c 5 phn t vi phn t u c gi tr l 1 (mangInt[0] = 1), phn t th hai l 3 (mangInt[1] = 3) , v.v. Object[] dayDT = {new BongDen(), new BongDen(), null}; Mng dayDT c khai bo l mng cc i tng ca lp Object, c to lp lu gi 3 i tng. Hai i tng u c khi to bi ton t to lp i tng ca lp BongDen, cn phn t th ba l null. char[] charArr = {a, b, a}; // mng 3 k t v hon ton khc vi aba
S dng mng
Ton b cu trc mng c tham chiu thng qua tn ca mng, cn cc phn t ca n c th truy nhp c bi ton t [].Ch s cc phn t ca mng nh nht l 0 v nh hn kch thc ca n l <Tn mng>.length. Phn t th i ca mng l phn t c ch s i - 1 (<Tn mng>[i-1]). Khi truy nhp n cc phn t ca mng, Java s t ng kim tra ch s ca cc phn t xem c nm trong phm vi xc nh hay khng, do vy ngi lp trnh khng phi bn tm n vn vt khi phm vi ca mng nh i vi cc ngn ng khc, nh C/C++. Nu ch s vt ra ngoi phm vi xc nh (nh hn 0, hay ln hn hoc bng kch thc ca mng <Tn mng>.length) th h thng s gi ti hm x l tnh hung ngoi l ArrayIndexOutOfBoundsException c th tm li v x l theo cu trc try-catch-finally (Chng V). V d 6.1 M t cch to ra nm mng 15 cc phn t ngu nhin v lu li nm gi tr cc tiu ca chng in ra mn hnh. Lu , y chng ta c th s dng cc hm ca lp Math tnh gi tr cc tiu, sinh s ngu nhin.
class Mang { public static void main(String args[]){ // Khai bo v to lp mng double[] mang1 = new double[5]; // (1) double[] mang2 = new double[15]; // (2) for(int j = 0; j < mang1.length; ++j){ // (3) randomize(mang2); // To lp mng ngu nhin mang1[j] = cucTieu(mang2); // Tm gi tr cc tiu }
- 117 -
// In cc gi tr cc tiu ra mn hnh for(int j = 0; j < mang1.length; ++j){ System.out.println(mang1[j]); } } public static void randomize(double[] mang){ for(int j = 0; j < mang.length; ++j) mang[j] = Math.random() * 100.0; } public static double cucTieu(double[] mang){ double giaTriMin = mang[0]; for(int j = 0; j < mang1.length; ++j) giaTriMin = Math.min(giaTriMin, mang[j]); return giaTriMin; } }
// (4)
// (5)
// (6)
double[][] maTran = { {1, 2, 3, 4}, // hng 1 {0, 2, 0, 0}, // hng 2 {0, 0, 3, 0}, // hng 3 {0, 0, 0, 4}, // hng 4 };
Lu : Cc mng trong mng nhiu chiu khng nht thit phi c s phn t ging nhau. V d, mng dayDen sau c 5 phn t l cc mng c kch thc khc nhau.
BongDen[][] dayDen = { {new BongDen(), null, new BongDen()},// Hng c 3 phn t (1) {null, new BongDen()}, // Hng c 2 phn t (2) {}, // Hng c 0 phn t (3) {new BongDen()}, // Hng c 3 phn t (4) {null} // Hng cha c to lp (5) }; Khng nn truy nhp n nhng thnh phn ca mng nu n cha c xc nh. V d, nu cha gn g cho dayDen[4] th s nhn c NullPointerException nu bn nh truy nhp n dayDen[4].length. trnh li th thng chng ta nn kim tra trng thi ca cc phn t. If (dayDen[4] != null) { // Truy nhp n cc phn t ca dayDen[4] }
Lu : Nh chng ta khng nh t u, tt c cc lp u l lp con ca Object, trong mng cng l lp con ca Object. Do vy, gia mng v Object c th thc
hin chuyn i kiu: + Chuyn t kiu mng v Object (M rng kiu), + Chuyn t Object sang kiu mng ( Thu hp kiu). V d:
class EpKieu{ static public void main(String[] args){ int[] a = new int[5]; Object o; o = a; // int[] l con ca Object int[] b = new int[5]; b = (int[])o; // Xem i tng ca Object nh l mng int[] } }
Ngoi ra cng cn lu thm l cu trc mng bo ton cu trc phn cp gia cc lp, ngha l nu B l lp con ca lp A th B[] cng l lp con ca lp A[]. - 119 -
6.2 Cc lp c bn ca Java
Phn ny cp n nhng lp c bn, hay s dng ca Java nh: Object, cc lp Wrapper (lp bao gi hay lp nguyn thy), Math, String v lp StringBuffer. Nhng lp ny c xy dng trong gi java.lang lun mc nh c np vo chng trnh. Tt c u l lp con ca Object v c xy dng theo cu trc nh trong hnh H6-1.
Object
Boolean
Character
Void
Number
Math
String
StringBuffer
...
Byte
Short
Integer
Long
Float
Double
6.2.1 Lp Object
Tt c cc lp c xy dng trong cc chng trnh Java u hoc l trc tip hoc gin tip l m rng ca Object. y l lp c s nht, nh ngha hu nh tt c nhng hm thnh phn c s cc lp con chu ca n s dng trc tip hoc vit nh cp chng 3. Object cung cp cc hm sau:
int hashCode()
Khi cc i tng c lu vo cc bng bm (hash table), hm ny c th s dng xc nh duy nht gi tr cho mi i tng. iu ny m bo tnh nht qun ca h thng khi thc hin chng trnh.
Class getClass()
Tr li tn lp ca i tng hin thi.
boolean equals(Object obj) Cho li kt qu true khi i tng hin thi v obj l cng mt i tng. Hm ny
thng c vit cc lp con cho ph hp vi ng cnh so snh bng nhau trong cc lp m rng .
String toString()
- 120 -
Nu cc lp con khng vit hm ny th n s tr li dng biu din vn bn (textual) ca i tng. Hm println() lp PrintStream s chuyn cc i s ca n sang dng vn bn khi s dng hm toString().
String doubleStr = doubleObj.toString(); // 3.14 Cc lp nh ngha hm typeValue() tr li cc gi tr nguyn thy tng ng vi cc i tng nguyn thy. boolean b = boolObj.charValue(); // true int i = intObj.intValue(); // 2002 float f = floatObj.floatValueOf(); // 3.14F double d = doubleObj.doubleValueOf(); // 3.14 char c = charObj.charValue(); // a Cc lp vit hm equals() thc hin so snh bng nhau ca cc i tng nguyn thy. Character charObj = new Character(a); boolean charTest = charObj.equals(b); // false Integer intObj1 = Integer.valueOf(2010); boolean intTest = intObj.equals(intObj1); // false
Lp Boolean
Lp ny nh ngha hai i tng Boolean.TRUE, Boolean.FALSE biu din cho hai gi tr nguyn thy true v false tng ng.
Lp Character
Lp Character nh ngha hai gi tr cc tiu, cc i Character.MIN_VALUE, Character.MAX_VALUE v cc gi tr kiu k t Unicode. Ngoi ra lp ny cn nh ngha mt s hm static x l trn cc k t: static boolean isLowerCase(char ch)// true nu ch l k t thng static boolean isUpperCase(char ch)// true nu ch l k t vit hoa static boolean isDigit(char ch) // true nuch l ch s static boolean isLetter(char ch) // true nu ch l ch ci static boolean isLetterOrDigit(char ch) // true nu ch l ch hoc l s static char toUpperCase(char ch)// Chuyn ch v ch vit hoa static char toLowerCase(char ch)// Chuyn ch v ch vit thng static char toTitleCase(char ch)// Chuyn ch v dng tiu .
Cc lp nguyn thy
Cc lp Byte, Short, Integer, Long, Float, Double l cc lp con ca lp Number. Trong cc lp ny u xc nh hai gi tr: <Lp nguyn thy>.MIN_VALUE <Lp nguyn thy>.MAX_VALUE l cc gii hn ca cc s trong kiu . V d, - 122 -
// -128 // 2147483647
- 123 -
max = day[i];k = i; for (int j = 0; j < i; j++) if (max < day[j]){ max = day[j]; k = j; } day[k] = day[i]; day[i] = max; } } public static void main(String[] args){ String str; int n; DataInputStream stream = new DataInputStream(System.in); System.out.print("\nCho biet bao nhieu so nhap vao: "); try{ str = stream.readLine(); }catch(IOException e){ System.err.println("I/O Error!"); str = "0"; } n = Integer.valueOf(str).intValue(); SapXep.day = new int[n]; nhap(); sapXep(); System.out.println("Day so duoc sap xep: "); hienThi(); } }
Lp Void
Lp ny k hiu cho i tng ca lp Class biu din cho gi tr void.
6.2.3 Lp Math
Lp final class Math nh ngha mt tp cc hm tnh thc hin cc chc nng chung ca ton hc nh cc php lm trn s, sinh s ngu nhin, tm s cc i, cc tiu, v.v. Lp final class Math cn cung cp nhng hng s nh s e (c s ca logarithm), s pi thng qua Math.E v Math.PI.
Cc hm lm trn v x l cc gi tr gii hn
static int abs(int i) static long abs(long l) static float abs(float f) static double abs(double d)
- 124 -
static double ceil(double d) Hm ceil() tr li gi tr nh nht kiu double m khng nh hn i s v li bng s nguyn. V d ceil(3.14) cho gi tr 4.0 l s trn trn ca i s. static double floor(double d) Hm floor() tr li gi tr ln nht kiu double m khng ln hn i s v li bng s nguyn. V d floor(3.14) cho gi tr 3.0 l s sn di ca i s. static int round(float f d) static long round(double d) Hm round() c np chng tr li s nguyn gn nht ca i s. static int max(int a, int b) static long max(long a, long b) static float max(float a, float b) static double max(double a, double b) Hm max() c np chng tr li gi tr cc i ca hai i s. static int min(int a, int b) static long min(long a, long b) static float min(float a, float b) static double min(double a, double b) Hm min() c np chng tr li gi tr cc tiu ca hai i s.
Cc hm ly tha
static double pow(double d1, double d2) Hm pow() tr li gi tr l ly tha ca d1 v d2 (d1d2). static double exp(double d) Hm exp() tr li gi tr l lu tha c s e v s m d (ed). static double log(double d) Hm log() tr li gi tr l l-ga-rit t nhin (c s e) ca d. static double sqrt(double d) Hm sqrt() tr li gi tr l cn bc hai ca d , hoc gi tr NaN nu i s m.
Cc hm lng gic
static double sin(double d) Hm sin() tr li gi tr l sine ca gc d c cho di dng radian. static double cos(double d) Hm cos() tr li gi tr l cose ca gc d c cho di dng radian. static double tan(double d) Hm tan() tr li gi tr l tangent ca gc d c cho di dng radian.
- 125 -
6.3 Lp String
Vic x l cc xu k t trong Java c h tr bi hai lp String v StringBuffer. Lp String dng cho nhng xu k t bt bin, ngha l nhng xu ch c v chng c to lp hay khi to gi tr u tin sau khng thay i. Lp StringBuffer c s dng i vi nhng xu k t ng, c th thay i ty .
To lp v khi to cc xu
Lp final class String c mt s ton t to lp v khi to gi tr ca cc i tng ca lp String da trn cc kiu ca cc i s. Ring i vi lp String trong Java cn s dng cch to lp v khi to xu theo cch truyn thng (khng s dng ton t to lp) da vo dy cc k t nh: String str = Dung dong den toi; Cc cch to lp khc u s dng cc ton t to lp String() c np chng theo cc i s. String(String s) String(<Kieu>[] mang) String(StringBuffer buf) V d:
byte[] bytes = {97, 98,98,97}; char[] characters = {a, b, b,a}; StringBuffer buff = new StringBuffer(abba); String byteStr = new String(bytes);// Chuyn mng bytes v xu String charStr = new String(charactes); String buffStr = new String(buff); String str = new String(abba);
c tng k t trong xu
int length()
Hm length() cho kt qu l s cc k t trong xu cn c gi l kch thc ca xu.
char charAt(int index) Hm charAt(int index) cho li k t th index (bt u t 0) ca xu hin thi (0 index length()). Nu index vt ra khi phm vi xc nh th h thng s cho qua ngoi l StringIndexOutOfBoundsException.
- 126 -
So snh cc xu
Cc k t c so snh da trn cc gi tr m Unicode. Hai xu c so snh theo th t t in bng cch so snh hai k t tng ng ca hai xu . Xu abba ng trc (nh hn) xu aha v k t th hai ca xu abba l b ng trc h ca aha. Trong lp String c nhng hm sau c s dng so snh cc xu.
boolean equals(Object obj) boolean equalsIgnoreCase(String str2) Hm equals() c vit String kim tra xem i tng lp String v i
tng tham s c cng tp cc k hiu hay khng. Tng t hm
int compareTo(String str2) int compareTo(Object obj) Hm compareTo() u thc hin s snh hai xu v tr li kt qu da vo kt
qu i snh: + 0 nu xu hin thi bng xu i s, + Gi tr nh hn 0, nu xu nh hn xu i s theo th t t in, + Gi tr ln hn 0, nu xu ln hn xu i s theo th t t in, - 127 -
Hm compareTo() th hai thc hin tng t nh nh hm u nu i s l chuyn v c i tng xu, ngc li s cho qua x l ngoi l ClassCastException. V d: String strA = new String(Ha Noi, Viet Nam); String strB = new String(Ha noi, Viet nam); boolean b1 = strA equals(strB); // false boolean b2 = strA equalsIgnoreCase(strB); // true String str1 = new String(abba); String str2 = new String(aha); int compVal = str1.compareTo(str2);// Gi tr m v str1<str2
Chuyn i cc trng hp ca k t
chuyn cc k t vit thng v ch vit hoa hoc ngc li, chng ta s dng nhng hm sau: String toUpperCase() String toLowerCase()
Lu : Nu khng c k t no phi chuyn i th hm cho li xu gc, ngc li khi c k t phi chuyn th i tng mi ca String c to ra v cho li kt qu .
V d: String strA = new String(Ha Noi, Viet Nam); String strB = new String(ha noi, viet nam); String str1 = strA.toUpperCase(); String str2 = strB.toLowerCase(); boolean b1 = str1 == strA; // false String str2 = str2 == strB; // true
Ghp cc xu xu
Ghp hai xu cho kt qu l mt xu, trong cc k t ca xu u ng trc cc k t ca xu th hai. Php ghp khng c tnh giao hon. Nh cc phn trc chng ta thy, php + c np chng thc hin php ghp ca cc xu. Ngoi ra chng ta cn c th s dng hm thnh phn ca lp String: String concat(String str) V d: String tin = Hoc lap trinh ; tin = tin + huong doi tuong ; tin = tin.concat(voi Java!); - 128 -
Kt qu cho xu mi: Hoc lap trinh huong doi tuong voi Java!.
Tm cc cc k t v cc xu con
Nhng hm sau c np chng tm ch s ca k t hay ch s bt u, ch s cui ca mt xu con. Nu khng tm c cc hm ny s cho kt qu l -1.
Trch ra cc xu con
String trim()
Hm ny c s dng to ra mt xu mi, trong cc k t trng (nhng k t c gi tr nh hn gi tr du cch ) trong xu u b loi b.
String cau = \t\n Java Applet \n\t; cau = cau.trim(); // Java Applet cau = cau.substring(5); // Applet cau = cau.substring(2,4); // ple
static String valueOf(int i) static String valueOf(long l) static String valueOf(float f) static String valueOf(double d)
Cc hm ny c np chng chuyn cc gi tr s v dng xu k t.
6.4 Lp StringBuffer
Ngc li vi lp String, lp cc xu ch cho c, lp StringBuffer li ci t cc xu cho c c ln ghi. Cc thnh phn trong xu ca lp StringBuffer khng nhng c php thay i m kch thc ca n cng c th thay i ty . Hai lp String v StringBuffer l tng i gn nhau, song chng li l hai lp c lp.
To lp i tng StringBuffer
Lp final class StringBuffer c ba ton t to lp to lp, khi to v t di (s k t) cho i tng ca lp StringBuffer.
StringBuffer(String str)
To ra i tng mi c ni dung ging nh xu i s str. Lu kch thc ca xu buffer c t bng kch thc ca xu str cng vi ch cho 16 k t nhiu hn.
StringBuffer(int length)
To ra i tng mi cha c ni dung v t kch thc ca xu buffer bng i s length, nu i s ln hn 0.
StringBuffer()
- 130 -
StringBuffer append(String str) StringBuffer append(char[] str) StringBuffer append(char[] str, int offset, int len) StringBuffer append(char c) Cc mng k t str v k t c c chuyn v xu v sau b sung vo xu buffer. StringBuffer append(boolean b) StringBuffer append(int i) StringBuffer append(long l) StringBuffer append(float f) StringBuffer append(double d) Cc gi tr nguyn thy c chuyn v xu v sau b sung vo xu buffer. StringBuffer insert(int offset, Object obj) StringBuffer insert(int offset, String str) StringBuffer insert(int offset, char[] str ) StringBuffer insert(int offset, char c)
- 131 -
StringBuffer insert(int offset, boolean b) StringBuffer insert(int offset, int i) StringBuffer insert(int offset, long l) StringBuffer insert(int offset, float f) StringBuffer insert(int offset, double d) Hm insert() c np chng chn i s th hai (sau khi c chuyn v dng xu bng cch s dng hm String.valueOf()) vo t v tr offset trong xu buffer. StringBuffer delete(int index) StringBuffer delete(int start, int end) Hm u xo i k t v tr index, hm sau xo i mt xu con k t v tr start n end. StringBuffer reverse() Ni dung ca xu buffer c o ngc li (soi gng).
V d: // S dng php b sung, chn v xo trong xu,
StringBuffer buf = new StringBuffer(Lan dem); buff = buff.delete(3,6); // Lan buff = buff.append(12); // Lan12 buff = buff.insert(3, co ); // Lan co 12 buff = buff.setCharAt(0,T); // Tan co 12 buff = buff.reverse(); // 21 oc naT
Giao din li (Core interface) cho php cc tuyn tp c x l c lp vi ci t (hnh H6-2). Tp cc ci t ca cc giao din cung cp cu trc d liu cho cc chng trnh c th s dng (hnh H6-3). Tp cc thut ton c s dng thc hin cc php ton trn cc tuyn tp.
<<interface>> List
<<interface>> SortedMap
Hnh H6-2 Cc giao din li ca Collection Cc giao din li ca cu trc Collection c m t trong bng sau:
SortedSet
M t interface c s nh ngha tt c cc php ton c bn cho cc lp cn duy tr thc hin v ci t chng M rng Collection ci t cu trc tp hp, trong khng c phn t c lp v chng khng c sp xp M rng Set ci t cu trc tp hp c sp,
- 133 -
List
Map SortedMap
trong khng c phn t c lp v chng c sp xp theo th t M rng Collection ci t cu trc danh sch, trong cc phn t c sp xp theo th t, v c lp interface c s nh ngha cc php ton cc lp s dng v ci t cc nh x t kho sang cc gi tr M rng ca Map ci t cc nh x kho theo th t
Phn ci t
Gi java.util cung cp tp cc lp ci t cc giao din li to ra nhng cu trc d liu thng s dng nh: Vector, HashTable, HashSet, LinkedList, TreeSet, v.v. Nhng lp ny v giao din li c xy dng theo cu trc phn cp nh trong hnh H6-3.
<< interface>> Map << interface>> HashMap HasTable << interface>> Set << interface>> List << interface>> Sorted Map
Tree Map
Hash Set
Array List
Vector
LinkedList
Tree Set
Hnh H6-3 Cc giao din li v cc lp ci t chng Trong hnh H6-3, k hiu biu din cho quan h k tha gia v cho c ch ci t cc giao din ca Java trong UML. biu din
S dng thut ton tm kim nh phn xc nh ch s ca phn t key trong danh sch list.
6.5.1 Collection
Giao din Collection c xy dng nh l mu hp ng cho tt c cc cu trc tuyn tp c th da vo m thc thi v ci t. Gi java.util cung cp cc lp tuyn tp (hnh H6-3) ci t hu ht cc hm ca Collection.
Cc php ton c s
int size();
Xc nh kch thc ca tuyn tp.
boolean isEmpty(); Tr li true nu tuyn tp rng, ngc li false. boolean contains(Object obj); Tr li true nu tuyn tp cha obj, ngc li false. boolean add(Object obj); // Ty chn boolean remove(Object obj); // Ty chn Tr li true nu tuyn tp thc hin thnh cng vic b sung (loi b) obj, ngc li false.
// Ty chn Kim tra xem tuyn tp hin thi c cha c tuyn tp c hay khng. boolean addAll(Collection c); // Ty chn
Thc hin php hp hai tuyn tp
// Ty chn // Ty chn
void clear()
// Ty chn Hy b i tng trong tuyn tp cc php trn tr li true nu thc hin thnh
cng v cho kt qu thc hin c minh ha nh trong hnh H6-4, trong a, b l hai tuyn tp bt k. - 135 -
a a
a.addAll(b)
a.removeAll(b)
a.retainAll(b)
HashSet
Mt dng ci t nguyn thy ca Set l lp HashSet, trong cc phn t ca n l khng c sp. Lp ny c cc ton t to lp:
HashSet()
To ra mt tp mi khng c phn t no c (tp rng).
HashSet(Collection c)
To ra mt tp mi cha cc phn t ca tuyn tp c nhng khng cho php lp.
HashSet(int initCapacity)
To ra mt tp mi rng c kch thc (kh nng cha) l initCapacity.
V d 6.4 M t cch to ra cc tp hp v kim tra mi qua h gia chng. Khi thc hin cc i s c a vo sau tn chng trnh theo dng lnh. Chng trnh bt u vi tap1 l rng v ly cc k t ca i s u tin to ra tap2. So snh hai tp , thng bo kt qu ra mn hnh, sau cng dn tap2 vo tap1 v li tip tc nh th i vi i s tip theo cho n ht.
import java.util.*; public class TapKT { public static void main(String args[]){ int nArgs = args.length; // S i s ca chng trnh Set tap1 = new HashSet(); // To ra tp th nht l rng for (int i = 0; i < nArgs; i++){ String arg = args[i]; // Ly tng i s ca chng trnh Set tap2 = new HashSet();// To ra tp th 2 int size = arg.length(); // S k t trong mi i s for (int j = 0; j < size; j++)// Tp th 2 cha cc k t ca arg tap2.add(new Character(arg.charAt(j))); // To ra tp tapChung chnh bng tap1 Set tapChung = new HashSet(tap1); tapChung.retainAll(tap2);// tapChung = tap1 tap2 boolean b = tapChung.size() == 0; if (b) System.out.println(tap2+" va "+tap1+" la roi nhau"); else { // tap2 c phi l tp con ca tap1? boolean isSubset = tap1.containsAll(tap2); // tap1 c phi l tp con ca tap2? boolean isSuperset = tap2.containsAll(tap1); // tap1 c bng tap2? if (isSuperset && isSubset) System.out.println(tap2 + " bang tap " + tap1); else if (isSubset) System.out.println(tap2+" la tap con cua "+tap1); else if (isSuperset) System.out.println(tap2+" la tap cha cua "+tap1); else System.out.println(tap2 + " va " + tap1 + " co " + tapChung + " la phan chung"); } tap1.addAll(tap2);// hp tap2 vo tap1 } } }
- 137 -
Dch v thc hin chng trnh vi cc i s nh sau: java TapKT em voi em anh s cho kt qu: [m, e] va [ ] la roi nhau [v, i, o] va [m, e] la roi nhau [m, e] la tap con cua [m, v, i, e, o] [a, h, n] va [m, v, i, e, o] la roi nhau
// Ty chn Thay th phn t c xc nh bi index bng elem. void add(int index, Object elem) // Ty chn Chn elem vo sau phn t c xc nh bi index. Object remove(int index) // Ty chn B i phn t c xc nh bi index. boolean addAll(int index, Collection c) // Ty chn Chn cc phn t ca tuyn tp c vo v tr c xc nh bi index. int indexOf(Object elem) Cho bit v tr ln xut hin u tin ca elem trong danh sch. int lastIndexOf(Object elem) Cho bit v tr ln xut hin cui cng ca elem trong danh sch. List subList(int fromIndex, int toIndex) Ly ra mt danh sch con t v tr fromIndex n toIndex . ListIterator listIterator()
Cho li cc phn t lin tip bt u t phn t u tin.
Vector v ArrayList l hai lp kiu mng ng (kch thc thay i c). Hiu sut
s dng hai lp ny l tng ng nhau, tuy nhin nu xt theo nhiu kha cnh khc th ArrayList l cu trc hiu qu nht ci t cu trc danh sch List. V d 6.5 H thng c mt dy N_DIGIT (5) ch s b mt. Hy vit chng trnh nhp vo N_DIGIT ch s on xem c bao nhiu ch s trng v c bao nhiu v tr cc ch s trng vi dy s cho trc.
import java.util.*; public class NhapDoanSo { final static int N_DIGIT = 5; public static void main(String args[]){ if(args.length != N_DIGIT) { System.err.println("Hay doan " + N_DIGIT + " chu so!"); return; } List biMat = new ArrayList();// To danh sch biMat l rng biMat.add("5"); // B sung cc s vo dy biMat biMat.add("3"); biMat.add("2"); biMat.add("7"); biMat.add("2"); List doan = new ArrayList();// To danh sch doan l rng for(int i = 0; i < N_DIGIT; i++) doan.add(args[i]); // a cc s t i s chng trnh vo doan List lap = new ArrayList(biMat);// Lu lu biMat sang lap int nChua = 0; // m s cc ch s trng nhau, ngha l thc hin c php b i remove() for(int i = 0; i < N_DIGIT; i++) if (lap.remove(doan.get(i))) ++nChua; int nViTri = 0; ListIterator kiemTra = biMat.listIterator(); ListIterator thu = doan.listIterator(); // Tm nhng v tr on trng trong hai dy c lp while (kiemTra.hasNext())// Khi cn phn t tip theo // Kim tra xem ln lt cc v tr ca hai dy c trng nhau hay khng if (kiemTra.next().equals(thu.next())) nViTri++; // Thng bo kt qu ra mn hnh System.out.println(nChua + " chu so doan trung."); System.out.println(nViTri + " vi tri doan trung."); } }
Dch v thc hin chng trnh: java NhapDoanSo 3 2 2 2 7 s cho kt qu: 4 chu so doan trung 1 vi tri doan trung - 139 -
// Ty chn
// Ty chn
boolean containsKey(Object key); Cho gi tr true nu key c nh x sang mt gi tr no , ngc li l false. boolean containsValue(Object value); Cho gi tr true nu value c nh x bi mt key no , ngc li l false. int size();
Cho s cc cp nh x <key, value>.
// Ty chn // Ty chn
void clear();
Xo i tt c cc nh x.
Set keySet();
Xc nh tp cc kho.
Collection values();
Xc nh tuyn tp cc gi tr.
Set entrySet();
Xc nh tp cc nh x <key, value>.
- 140 -
Cc lp HashMap v HashTable
Hai lp ny ci t giao din Map v c xy dng trong java.lang. Chng cho php to ra cc nh x mi c th rng hoc c nhng kch thc ty . V d 6.6 Vit chng trnh nhp vo cc trng lng v in ra tn sut ca cc trng lng trong cc nhm cch nhau 5 n v (kg).
import java.util.*; public class NhomTrongluong { public static void main(String args[]){ // To ra mt nh x lu tn sut ca mi nhm Map demNhom = new HashMap(); int nArgs = args.length; // c cc trng lng c nhp vo t i s v chia nhm cch nhau 5 n v. for(int i = 0; i < nArgs; i++){ double trongL = Double.parseDouble(args[i]); Integer nhomTL=new Integer((int)Math.round(trongL/5)*5); Integer demCu = (Integer)demNhom.get(nhomTL); // Tng s ln trng lung trong cng nhm, nu l ln u (demCu = null) th t l 1. Integer demMoi = (demCu == null)? new Integer(1): new Integer(demCu.intValue()+1); demNhom.put(nhomTL, demMoi); } // Ly ra tp cc gi tr t nh x demNhom List keys = new ArrayList(demNhom.keySet()); // Sp xp li theo cc nhm trng lng Collections.sort(keys); ListIterator keyIterator = keys.listIterator(); // Tm tn sut ca cc trng lng c nhp vo trong cc nhm while(keyIterator.hasNext()) { Integer nhom = (Integer) keyIterator.next(); Integer dem = (Integer) demNhom.get(nhom); int demInt = dem.intValue(); // S dng hm fill() ca lp Array to ra xu gm demInt cc du * char[] bar = new char[demInt]; Arrays.fill(bar, '*'); System.out.println(nhom+"\t" + new String(bar)); } } }
Dch v chy chng trnh NhomTrongLuong vi cc tham s: java NhomTrongLuong 75 72 93 12 34 s cho kt qu: 10 35 75 95 * * ** * - 141 -
Nh vy, nhm 10 kg c 1, 35 kg c 1, 75 kg c 2 v 95 kg c 1.
- 142 -
TreeSet v TreeMap
Hai lp ny ci t hai giao din SortedSet v SortedMap tng ng. Chng c bn loi ton t to lp nh sau:
TreeSet() TreeMap()
To ra nhng tp hoc nh x mi v rng, c sp theo th t tng dn ca cc phn t hoc ca kho.
TreeSet(Comparator c) TreeMap(Comparator c)
To ra nhng tp hoc nh x mi c sp v xc nh th t so snh theo c.
TreeSet(Collection c) TreeMap(Map m)
To ra nhng tp hoc nh x mi c sp v c cc phn t ly t c hoc t m tng ng.
TreeSet(SortedSet s) TreeMap(SortedMap m)
To ra nhng tp hoc nh x mi c sp v c cc phn t ly t s hoc t m tng ng.
Bi tp
6.1 Xy dng lp cc ma trn cp n m c cc hm: + Nhp, hin th cc ma trn, + Thc hin cc php cng, tr, nhn hai ma trn, + Tnh nh thc ca ma trn nu l ma trn vung. 6.2 Xy dng lp cc phn s (s hu t) c cc hm: + Cc ton t to lp phn s c ngha (mu s khc 0, khng c du m mu s, ti gin, v.v + Thc hin cc php +, -, *, / trn cc phn s. 6.3 Nhng lnh no trong s cc lnh sau l khng hp l? a/ int[] i[] = {{1, 2},{1},{},{1, 2, 3}}; b/ int i[] = new int[2] {1, 2}; c/ int i[][] = new int[][] {{1, 2, 3}, {4, 5, 6}}; d/ int i[][] = {{1, 2},new int[2]}; e/ int i[] = {1, 2, 3, 4}; 6.4 Vit chng trnh tnh s pi, bit rng pi = 4 * (1 - 1/3 + 1/5 - 1/7 + ... ) 6.4 Xy dng lp KhachHang c cc thuc tnh m t: h v tn, a ch lin h, cc s in thoi, a ch E-mail v cc hm thnh phn : + Nhp, hin th cc thng tin v khch hng, + Tm kim theo h hoc theo tn gi ca khch hng, - 143 -
+ Tm theo a ch v khng phn bit ch vit thng hay ch vit hoa. 6.5 Cho bit kt qu thc hin ca chng trnh sau:
import java.util.*;
public class Sets { public static void main(String[] args){ List list = new ArrayList(); list.add(1); list.add(2); list.add(1,3); List list2 = new ArrayList(list); list.addAll(list2); list2 = list.subList(2,5); System.out.printl(list2); list2.clear(); System.out.printl(list); } } 6.6 Xy dng lp VanBan x l cc vn bn v lp ny c cc hm: + Nhn mt xu k t v cho li xu khng c k t no b lp li, + Nhn mt xu bt k v cho li kt qu l s cc k t ch xut hin mt ln, + Nhn ba xu, thc hin tm v thay th tt c cc ln xut hin ca xu th hai trong xu th nht bng xu th ba.
- 144 -