4 p0 }' ~* N' ^# m4 c3 P) s List<String> list = new ArrayList<String>(); # Q' `4 l3 w, v( M1 T# u; y% B
- I2 n* ?7 p' C2 [9 k! P
//"c"在Arraylist不连续存储 6 h2 b2 j! J+ N# a /* 0 X/ a3 e3 B# [) Y list.add("c"); ; C! f2 L8 q4 _3 O2 D$ \
list.add("a"); , ^: c, y9 a! U, l+ b
list.add("c"); # {) a7 b( [! _- @5 Y list.add("b"); 3 c9 a8 `4 ?4 w9 \ list.add("c"); ! }5 c; H; y* W* o list.add("d"); 3 z0 ^( T: {4 u+ U E list.add("c"); 9 h9 [3 G8 M6 Y) o */ 9 M& C) D7 }! ~& E: K 2 x: d1 m: @+ A; J //"c"在Arraylist有连续存储 4 i. A' Y: Y& \ c, P list.add("a"); ; k8 b. v' y2 m- z: J list.add("c"); $ t1 v+ r- U" c, b' e6 k* V
list.add("c"); 7 j3 d2 J. g3 j list.add("b"); 5 R- W* c: B5 L, e list.add("c"); 8 t) x, i7 r- N
list.add("c"); & R0 w! R* S/ _2 F$ x list.add("d"); : Z" V2 A- X4 f4 Q
list.add("c"); % p; |: p5 X# X3 [9 \/ k k
& [5 _+ X- ?1 u) W A5 O, V 4 s: u. |( y; y q/ t% s) T3 k* F //删除Arraylist中值为"c"的元素 8 ^7 g, K* E! o' u, V
) k; I5 s. [$ U! I) Y: F
//有可能不能全部删除 " A. U4 E. K4 _1 w% B2 Z
//removeListElement1(list); ! y2 t8 g) ?6 @ _
, V% B9 ^9 a ^4 W4 g2 u3 j
//能够正确删除 6 k$ q- I$ ~4 d; I, K9 v. l- ^ //removeListElement2(list); . h9 `9 [- {! i3 m; B
. A0 ^) D. G/ r //能够正确删除 ! W" J2 c0 q) T% C) g7 n# |
//removeListElement3(list); 4 F2 b9 z* i& t5 J7 h; x' v) @ } ; ?& N: d/ ~, V+ q) s, f6 T
4 k- T* V% H( M) w E9 K; O w5 _+ G* w
) I& n; ?% B2 }& h& S
/** / r; z0 h1 D9 k% o$ k0 d1 R
* 删除list中值为"c"的元素 6 _6 g& _/ d: M. L& U1 I
* ( c& e- T! m# \, r
* 这种方式: ; { g9 H! h; r * 8 H p2 ~+ O9 G
* 当值为"c"的元素在Arraylist中不连续存储的时候,是可以把值为"c"的元素全部删掉 : ?( i; d; C& _# I8 N9 E
* 8 s0 g& \1 n. t4 ~/ f: i. {& s8 x * 但是当值为"c"的元素在Arraylist中有连续存储的时候,就没有把值为"c"的元素全部删除 ; J. m' F, H0 |1 ?6 I * 因为删除了元素,Arraylist的长度变小了,索引也会改变,但是迭代的下标没有跟着变小 1 m$ q4 n# E; v& Y- m3 I7 b7 V
*/ : e. ~2 y! }; R public static void removeListElement1(List<String> list) { 5 k E0 O v( V for(int i=0;i<list.size();i++) { 8 w) H, e: B( y# J& @8 q5 a) J
if("c".equals(list.get(i))) { % |0 e4 b' D& U% ?$ | list.remove(i); ) M8 m) S$ @: X5 t7 J5 l
} : J7 w! y* p+ i1 V } ( r7 @1 Z$ D) C4 U5 y
' N( Q: G9 u" k d( t$ |2 s
} , n! E0 q" |. `* R2 S! c% L3 e * X e, @: W6 y! D6 V. ? /** : p3 m+ O- f" O! d4 P * 删除Arraylist中值为"c"的元素 4 s5 t- g. ~/ q. E. ?$ j" V% Q
* ( J/ h& s( M5 m: } * 这种方式: 4 H6 L: B# r2 a1 ~2 o7 c& A2 D * - h; U+ y2 I. }- O+ ?3 I
* 不管值为"c"的元素在Arraylist中是否连续,都可以把值为"c"的元素全部删除 1 G5 }( W: C' f! D */ ' l7 y' H' ?9 R6 x7 W8 n public static void removeListElement2(List<String> list) { ' F, j) r/ _! F# ?+ v
for(int i=0;i<list.size();i++) { - @& a; f! u& P+ H7 |* Q5 i% J/ ~+ ?
if("c".equals(list.get(i))) { * F' \$ B+ P& U list.remove(i); 9 J2 ?. g: A. U5 o( B) C --i;//删除了元素,迭代的下标也跟着改变 / ?& Q, @2 u+ M; l6 F } 3 m# H L& ]- ?, l
} - T, @- L! k. n5 A } : m& A* f. S* b {% J
( u! @- p' A# O" i, S ^- f k% y
/** 2 i0 k# c! G' @$ H" y! B/ T) V' M * 删除Arraylist中值为"c"的元素 5 a1 e; P1 a1 z" H
* $ k8 k0 ]$ i7 v2 ~# C. e * 这种方式: 8 V, Z0 X( E% O5 q$ C# x+ L * & u, D3 {* g7 @! B& Y9 c * 不管值为"c"的元素在list中是否连续,都可以把值为"c"的元素全部删除 ' v5 k: w0 x( i6 K2 p * 0 e. D; Z; R% H5 A7 f4 X * 需保证没有其他线程同时在修改 ! e# G x, w3 w! W0 A5 c
*/ * I# r2 G" D6 j/ w
public static void removeListElement3(List<String> list) { % ^& V( l+ ?) [* Q2 Y4 _: L
Iterator<String> iterator = list.iterator(); ( I: J) Q+ b, W8 m2 p! ^ while(iterator.hasNext()) { % a* |' ^7 u3 y' _: @4 Q6 A
String str = iterator.next(); 1 A! l0 f$ g! o# ]. r* x& |$ Q8 j if("c".equals(str)) { ) i! }! ?3 H! T+ V& X0 _ iterator.remove(); n) m" L! P+ Y/ ^0 U
} 4 y( Q, q" d( a, w# {6 _5 B( F! B0 o1 |; F( D7 U& F. o _7 [) S
} + R0 e/ c8 v1 l3 r( y5 ?
} $ G9 W* m# p! Y# P9 w+ S
8 g* [2 m, M# j8 d, b6 Y