1+ package com .anxpp .designpattern .iterator ;
2+
3+ import java .util .Arrays ;
4+
5+ //方便演示而实现的简陋的数组list
6+ public class MyArrayList <T > implements MyList <T >{
7+ private int size ; //存放的元素个数,会默认初始化为0
8+ private Object [] defaultList ; //使用数组存放元素
9+ private static final int defaultLength = 10 ;//默认长度
10+ public MyArrayList (){ //默认构造函数
11+ defaultList = new Object [defaultLength ];
12+ }
13+ @ Override
14+ public MyIterator <T > iterator () {
15+ return new Iterator ();
16+ }
17+ //大小自动增长
18+ private void ensureCapacity (int capacity ){
19+ int nowLength = defaultList .length ;
20+ if (capacity >= nowLength ){
21+ nowLength = nowLength + (nowLength >>1 );
22+ if (nowLength <0 )//溢出
23+ nowLength = Integer .MAX_VALUE ;
24+ defaultList = Arrays .copyOf (defaultList , nowLength );
25+ }
26+ }
27+ //添加元素
28+ @ Override
29+ public boolean add (T t ) {
30+ ensureCapacity (size +1 );
31+ defaultList [size ++] = t ;
32+ return true ;
33+ }
34+ //获取元素
35+ @ SuppressWarnings ("unchecked" )
36+ @ Override
37+ public T get (int index ) {
38+ if (index <0 || index >=size ) return null ;
39+ return (T ) defaultList [index ];
40+ }
41+ @ Override
42+ public T remove () {
43+ return remove (size -1 );
44+ }
45+ @ SuppressWarnings ("unchecked" )
46+ @ Override
47+ public T remove (int index ) {
48+ if (index <0 ||index >=size ) return null ;
49+ T element = (T ) defaultList [index ];
50+ if (index != size -1 )
51+ System .arraycopy (defaultList , index +1 , defaultList , index ,size -index -1 );
52+ size --;
53+ return element ;
54+ }
55+ @ Override
56+ public boolean remove (T element ) {
57+ if (element ==null ){
58+ for (int i = 0 ; i <size ;i ++)
59+ if (defaultList [i ]==null ){
60+ System .arraycopy (defaultList , i +1 , defaultList , i ,size -i -1 );
61+ size --;
62+ return true ;
63+ }
64+ }
65+ else {
66+ for (int i = 0 ; i <size ;i ++)
67+ if (defaultList [i ].equals (element )){
68+ System .arraycopy (defaultList , i +1 , defaultList , i ,size -i -1 );
69+ size --;
70+ return true ;
71+ }
72+ }
73+ return false ;
74+ }
75+ @ Override
76+ public boolean set (int index ,T element ) {
77+ if (index <0 ||index >=size ) return false ;
78+ defaultList [index ] = element ;
79+ return true ;
80+ }
81+ @ Override
82+ public int size () {
83+ return size ;
84+ }
85+ //迭代器
86+ private class Iterator implements MyIterator <T >{
87+ private int next ;
88+ @ Override
89+ public boolean hasNext () {
90+ return next <size ;
91+ }
92+ @ SuppressWarnings ("unchecked" )
93+ @ Override
94+ public T next () {
95+ return (T ) defaultList [next ++];
96+ }
97+ @ Override
98+ public T remove () {
99+ // TODO Auto-generated method stub
100+ return null ;
101+ }
102+ }
103+ }
0 commit comments