Java封装数组之改进为泛型数组操作详解
本文实例讲述了Java封装数组之改进为泛型数组操作。分享给大家供大家参考,具体如下:
前言:通过上一节我们对我们需要封装的数组,进行了基本的增删改查的封装,但只局限于int类型的操作,为了能提供多种类型数组的操作,我们可以将其进一步封装为泛型数组。
1.定义泛型数组相关概念
(1)泛型数组让我们可以存放任何数据类型
(2)存放的类型不可以是基本数据类型,只能是类对象
基本类型:
boolean、byte、char、short、int、long、float、double
(3)每个基本数据类型都有对应的包装类
Boolean、Byte、Char、Short、Integer、Long、Float、Double
2.自定义泛型数组
/** *2.泛型数组 */ publicclassGenericArray{ //使用private的目的是防止用户从外界修改,造成数据不一致 privateE[]data; privateintsize;//数组中元素个数 //构造函数,传入数组的容量capacity构造Array函数 publicGenericArray(intcapacity){ data=(E[])newObject[capacity];//泛型不能直接实例化 size=0; } //无参构造函数,默认数组的容量capacity=10 publicGenericArray(){ this(10); } //获取数组中元素个数 publicintgetSize(){ returnsize; } //获取数组的容量 publicintgetCapacity(){ returndata.length; } //获取数据是否为空 publicbooleaniEmpty(){ returnsize==0; } //向所有元素后添加元素 publicvoidaddLast(Ee){ add(size,e);//size表示此时的最后一个元素 } //在所有元素之前添加一个新元素 publicvoidaddFirst(Ee){ add(0,e);//0表示第一个位置 } //在第index个位置插入一个新元素 publicvoidadd(intindex,Ee){ //(1)先判断当前数组容量是否已满,未满则转入(2),否则抛出异常 if(size==data.length){ thrownewIllegalArgumentException("数组已满"); } //(2)判断当前需要插入值的位置是否合理,合理则转入(3),否则抛出位置不合法异常 if(index<0||index>size){ thrownewIllegalArgumentException("您选择的位置不合法"); } //将index位置之后的元素往后依次移动一位 for(inti=size-1;i>=index;i--){ //(3)将index之后的元素依次往后移动一位,然后将新元素插入到index位置 data[i+1]=data[i]; } data[index]=e; //(4)维护size值 size++; } //获取index索引位置的元素 publicEget(intindex){ //(1)判断当前需要插入值的位置是否合理,合理则转入(2),否则抛出位置不合法异常 if(index<0||index>size) thrownewIllegalArgumentException("您选择的位置不合法"); //(2)返回索引index对应的值 returndata[index]; } //获取最后一个元素 publicEgetLast(){ returnget(size-1); } //获取第一个元素 publicEgetFirst(){ returnget(0); } //修改index索引位置的元素为e voidset(intindex,Ee){ //(1)判断当前需要插入值的位置是否合理,合理则转入(2),否则抛出位置不合法异常 if(index<0||index>size) thrownewIllegalArgumentException("您选择的位置不合法"); //(2)修改索引index对应的值 data[index]=e; } //查找数组中是否包含元素e publicbooleancontains(Ee){ for(inti=0;i size) thrownewIllegalArgumentException("您选择的位置不合法"); //2.先存储需要删除的索引对应的值 Eret=data[index]; //将索引为index之后(index)的元素依次向前移动 for(inti=index+1;i 3.测试泛型数组
publicclassStudent{ privateStringname; privateintscore; publicStudent(Stringname,intscore){ this.name=name; this.score=score; } @Override publicStringtoString(){ returnString.format("Student(name:%s,score:%d)",name,score); } publicstaticvoidmain(String[]args){ GenericArraystudentArray=newGenericArray<>(); studentArray.addLast(newStudent("test01",66)); studentArray.addLast(newStudent("test02",77)); studentArray.addLast(newStudent("test03",88)); System.out.println(studentArray); } } 验证结果如下:
更多关于java相关内容感兴趣的读者可查看本站专题:《Java数组操作技巧总结》、《Java字符与字符串操作技巧总结》、《Java数学运算技巧总结》、《Java数据结构与算法教程》及《Java操作DOM节点技巧总结》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。