【java】模拟ArrayList实现相关功能
ArrayList集合底层是一个Object类型的数组,默认容量是10,扩容时变为原来的1.5倍。有增加、删除、修改、查找等方法。所以我们可以建立一个集合类模拟实现一个集合的各种方法。
新建一个ArrayListClass类,创建Object类数组和int类型的指针用来表示集合长度。在该类中添加增加add()、删除remove()、修改change()、根据值获取第一次出现该值得下标getValue()、根据下标获取值getKey(),查询集合数量size()、集合遍历展示show()和数组扩容ArrayExpansion()的方法。
public class ArrayListClass {
Object[] list ;
int size=0;
//构造函数声明生成一个容量为10的Object类的数组
public ArrayListClass(){
list = new Object[10];
}
//增加方法
public void add(Object o){
if(size>=list.length){
ArrayExpansion(size);
}
list[size]=o;
size++;
}
//根据下标删除指定元素
public void remove(int index){
if(index<0 || index>size){
System.out.println("指定的索引不在范围内");
}
else{
for (int i = index; i <size-1 ; i++) {
list[i]=list[i+1];
}
list[size-1]=null;
size--;
}
}
//默认删除最后一个元素
public void remove(){
if(size==0){
System.out.println("删除失败,集合内无元素");
}
else{
list[size-1]=null;
size--;
}
}
//根据下标修改值
public boolean change(int index,Object o){
if(index<0 || index>size){
System.out.println("指定的索引不在范围内");
return false;
}
else{
list[index]=o;
return true;
}
}
//根据下标获取元素
public Object getValue(int index){
if(index<0 || index>size){
System.out.println("指定的索引不在范围内");
return null;
}
else{
Object o =list[index];
return o;
}
}
//根据值获取第一次出现的下标
public int getKey(Object o){
int index = -1;
for (int i = 0; i < size; i++) {
if(list[i].equals(o)){
index = i;
break;
}
}
if(index==-1){
System.out.println("集合中未包含该元素");
return -1;
}
else {
return index;
}
}
//获取集合数量
public int size(){
return size;
}
//遍历集合
public void show(){
for (int i = 0; i < size; i++) {
System.out.println(list[i]);
}
}
//数组扩容
private void ArrayExpansion(int size) {
Object[] list1 = new Object[list.length*2];
for (int i = 0; i < list.length; i++) {
list1[i]=list[i];
}
list=list1;
}
}
我们在主方法中测试该类的使用
public class test01 {
public static void main(String[] args) {
ArrayListClass alc = new ArrayListClass();
alc.add("开始");
alc.add(121);
alc.add(221);
alc.add(321);
alc.add("结束");
alc.remove(0);
alc.change(0,100);
System.out.println("第一个元素是---->"+alc.getValue(0));
alc.show();
}
}
得到相应的验证结果