M ts phép toán khác
3. List (danh sách)
C u trúc List là d ng t p h p các ph n t c s p theo th t (còn c g i là dãy tu n t ) và trong ó cho phép l p (hai ph n t gi ng nhau). Ngoài nh ng hàm mà nó c k th a t Collection, List còn b sung thêm nh ng hàm nh :
Object get(int index)
Cho l i ph n t c xác nh b i index.
Object set(int index, Object elem) // Tùy ch n
Thay th ph n t c xác nh b i index b ng elem.
void add(int index, Object elem) // Tùy ch n
Chèn elem vào sau ph n t c xác nh b i index.
Object remove(int index) // Tùy ch n
B i ph n t c xác nh b i index.
boolean addAll(int index, Collection c) // Tùy ch n
Chèn các ph n t c a t p h p c vào v trí c xác nh b i index.
int indexOf(Object elem)
Cho bi t v trí l n xu t hi n u tiên c a elem trong danh sách.
int lastIndexOf(Object elem)
Cho bi t v trí l n xu t hi n cu i cùng c a elem trong danh sách.
List subList(int fromIndex, int toIndex)
L y ra m t danh sách con t v trí fromIndex n toIndex .
ListIterator listIterator()
Cho l i các ph n t liên ti p b t u t ph n t u tiên.
ListIterator listIterator(int index)
Cho l i các ph n t liên ti p b t u t ph n t c xác nh b iindex.
Trong ó ListIterator là giao di n m r ng giao di n Iterator ã có trongjava.lang.
Các l p ArrayList, Vector và LinkedList
Ba l p này có nh ng toán t t o l p t o ra nh ng danh sách m i r ng ho c có các ph n t l y theo các t p h p khác.
Vector và ArrayList là hai l p ki u m ng ng (kích th c thay i c). Hi u su t s d ng hai l p này là t ng ng nhau, tuy nhiên n u xét theo nhi u khía c nh khác thì ArrayList là c u trúc hi u qu nh t cài t c u trúc danh sách List.
Ví d 6.5 H th ng có m t dãy N_DIGIT (5) ch s bí m t. Hãy vi t ch ng trình nh p vào N_DIGIT ch s oán xem có bao nhiêu ch s trùng và có bao nhiêu v trí các ch s trùng v i dãy s cho tr c.
import java.util.*;
public class NhapDoanSo {
final staticint N_DIGIT = 5;
public static voidmain(String args[]){
if(args.length != N_DIGIT) {
System.err.println("Hay doan " + N_DIGIT + " chu so!");
return; }
biMat.add("5"); // B sung các s vào dãy biMat biMat.add("3");
biMat.add("2"); biMat.add("7"); biMat.add("2");
List doan =new ArrayList();// T o danh sách doan là r ng
for(int i = 0; i < N_DIGIT; i++)
doan.add(args[i]); // a các s t i s ch ng trình vào doan List lap =new ArrayList(biMat);// L u l u biMat sang lap
int nChua = 0;
// m s các ch s trùng nhau, ngh a là th c hi n c phép 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();
// Tìm nh ng v trí oán trúng trong hai dãy có l p
while(kiemTra.hasNext())// Khi còn ph n t ti p theo
// Ki m tra xem l n l t các v trí c a hai dãy có trùng nhau hay không
if (kiemTra.next().equals(thu.next())) nViTri++; // Thông báo k t qu ra màn hình
System.out.println(nChua + " chu so doan trung."); System.out.println(nViTri + " vi tri doan trung.");
}} }
D ch và th c hi n ch ng trình:
java NhapDoanSo 3 2 2 2 7 s cho k t qu :
4 chu so doan trung 1 vi tri doan trung