1.使用数组实现ArrayList
package
com.briup.collection;
//使用数组实现
public
class
ArrayList
implements
List {
private
Object[]
elements
;
//数组
private
int
length
;
//数据的长度
private
int
size
;
//当前元素的个数
public
ArrayList() {
elements
=
new
Object[10];
//创建一个长度为10的数组
this
.
length
=10;
}
public
ArrayList(
int
length
){
elements
=
new
Object[
length
];
//创建一个长度为length的数组
this
.
length
=
length
;
}
//创建检查空间是否足够的方法
public
void
ensureCap(){
if
(
size
>=
length
) {
Object[]
array
=
new
Object[
length
+10];
System.
arraycopy
(
elements
, 0,
array
, 0,
size
);
elements
=
array
;
//把新数组赋值给旧数组
length
=
length
+10;
//数组的长度增加10
}
}
@Override
//向指定位置添加元素
public
void
add(
int
index
, Object
obj
) {
if
(
index
<0 ||
index
>
size
)
return
;
//空间是否足够
ensureCap();
for
(
int
i
=
size
;
i
>
index
;
i
--) {
elements
[
i
]=
elements
[
i
-1];
//把前一个值赋给后一个值
}
elements
[
index
] =
obj
;
size
++;
}
@Override
public
void
add(Object
obj
) {
add(
size
,
obj
);
}
@Override
//删除元素
public
Object remove(
int
index
) {
if
(
index
<0 ||
index
>=
size
)
return
null
;
Object
obj
=
elements
[
index
];
for
(
int
i
=
index
;
i
<
size
-1;
i
++) {
elements
[
i
]=
elements
[
i
+1];
//把后一个值赋给前一个值
}
size
--;
elements
[
size
]=
null
;
//把最后一个数据赋值为null1
return
obj
;
}
@Override
// 设置某个位置的数据
public
void
set(
int
index
, Object
obj
) {
if
(
index
<0 ||
index
>=
size
)
return
;
elements
[
index
]=
obj
;
}
@Override
// 获取数据
public
Object get(
int
index
) {
if
(
index
<0 ||
index
>=
size
)
return
null
;
return
elements
[
index
];
}
//获取数据的长度
@Override
public
int
size() {
return
size
;
}
@Override
public
Iterator iterator() {
return
new
Iterator(){
//当前位置
private
int
position
=-1;
public
boolean
hasNext() {
if
(
position
+1<
size
)
return
true
;
return
false
;
}
@Override
public
Object next() {
return
get(++
position
);
}
@Override
public
Object remove() {
return
ArrayList.
this
.remove(
position
--);
}
};
}
}
2.使用链表实现LinkedList
package
com.briup.collection;
//使用链表实现
public
class
LinkedList
implements
List {
private
Node
head
;
//头结点
private
int
size
;
//当前数据的个数
public
LinkedList() {
head
=
new
Node();
}
@Override
public
void
add(
int
index
, Object
obj
) {
if
(
index
<0 ||
index
>
size
)
return
;
Node
curr
=
head
;
//当前节点
for
(
int
i
=0;
i
<
index
;
i
++){
curr
=
curr
.
next
;
// 下一个节点作为当前节点。
}
Node
node
=
new
Node(
obj
);
node
.
next
=
curr
.
next
;
curr
.
next
=
node
;
size
++;
}
@Override
public
void
add(Object
obj
) {
add(
size
,
obj
);
}
@Override
public
Object remove(
int
index
) {
if
(
index
<0||
index
>=
size
)
return
null
;
Node
curr
=
head
;
//当前节点
Node
pre
=
null
;
for
(
int
i
= 0;
i
<=
index
;
i
++) {
pre
=
curr
;
curr
=
curr
.
next
;
}
pre
.
next
=
curr
.
next
;
curr
.
next
=
null
;
size
--;
return
curr
.getData();
}
@Override
public
void
set(
int
index
, Object
obj
) {
if
(
index
<0 ||
index
>=
size
)
return
;
Node
curr
=
head
;
for
(
int
i
= 0;
i
<=
index
;
i
++) {
curr
=
curr
.
next
;
}
curr
.setData(
obj
);
}
@Override
public
Object get(
int
index
) {
if
(
index
<0 ||
index
>=
size
)
return
null
;
Node
curr
=
head
;
for
(
int
i
= 0;
i
<=
index
;
i
++) {
curr
=
curr
.
next
;
}
return
curr
.getData();
}
@Override
public
int
size() {
//
TODO
自动生成的方法存根
return
size
;
}
@Override
public
Iterator iterator() {
//
TODO
自动生成的方法存根
return
null
;
}
}