javaList子类基础入门.docx
- 文档编号:17098396
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:21
- 大小:79.93KB
javaList子类基础入门.docx
《javaList子类基础入门.docx》由会员分享,可在线阅读,更多相关《javaList子类基础入门.docx(21页珍藏版)》请在冰点文库上搜索。
javaList子类基础入门
1:
List的子类(掌握)
(1)List的子类特点
ArrayList:
底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:
底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
(2)ArrayList
A:
没有特有功能需要学习
B:
案例
a:
ArrayList存储字符串并遍历
b:
ArrayList存储自定义对象并遍历
(3)Vector
A:
有特有功能
a:
添加
publicvoidaddElement(Eobj)--add()
b:
获取
publicEelementAt(intindex)--get()
publicEnumeration
B:
案例
a:
Vector存储字符串并遍历
b:
Vector存储自定义对象并遍历
(4)LinkedList
A:
有特有功能
a:
添加
addFirst()
addLast()
b:
删除
removeFirst()
removeLast()
c:
获取
getFirst()
getLast()
B:
案例
a:
LinkedList存储字符串并遍历
b:
LinkedList存储自定义对象并遍历
(5)案例:
A:
去除集合中的多个字符串的重复元素
如果字符串的内容相同,即为重复元素
B:
去除集合中的多个自定义对象的重复元素
如果自定义对象的成员变量值都相同,即为重复元素
C:
用LinkedList模拟一个栈数据结构的集合类,并测试。
你要定义一个集合类,只不过内部可以使用LinkedList来实现。
2:
泛型(掌握)
(1)泛型概述
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
(2)格式:
<数据类型>
注意:
该数据类型只能是引用类型。
(3)好处:
A:
把运行时期的问题提前到了编译期间
B:
避免了强制类型转换
C:
优化了程序设计,解决了黄色警告线问题,让程序更安全
(4)泛型的前世今生
A:
泛型的由来
Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题
B:
泛型类
C:
泛型方法
D:
泛型接口
E:
泛型高级通配符
?
?
extendsE
?
superE
(5)我们在哪里使用呢?
一般是在集合中使用。
3:
增强for循环(掌握)
(1)是for循环的一种
(2)格式:
for(元素的数据类型变量名:
数组或者Collection集合的对象){
使用该变量即可,该变量其实就是数组或者集合中的元素。
}
(3)好处:
简化了数组和集合的遍历
(4)弊端
增强for循环的目标不能为null。
建议在使用前,先判断是否为null。
4:
静态导入(了解)
(1)可以导入到方法级别的导入
(2)格式:
importstatic包名....类名.方法名;
(3)注意事项:
A:
方法必须是静态的
B:
如果多个类下有同名的方法,就不好区分了,还得加上前缀。
所以一般我们并不使用静态导入,但是一定要能够看懂。
5:
可变参数(掌握)
(1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。
(2)格式:
修饰符返回值类型方法名(数据类型...变量){}
注意:
A:
该变量其实是一个数组名
B:
如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
(3)Arrays工具类的一个方法
asList()把数组转成集合。
注意:
这个集合的长度不能改变。
6:
练习(掌握)
A:
集合的嵌套遍历
B:
产生10个1-20之间的随机数,要求随机数不能重复
C:
键盘录入多个数据,以0结束,并在控制台输出最大值
7:
要掌握的代码
集合存储元素,加入泛型,并可以使用增强for遍历。
8集合嵌套存储和遍历元素
9去除集合中重复值
10ArrayList字符串的遍历
packagecn.itcast_01;
importjava.util.ArrayList;
importjava.util.Iterator;
/*
*ArrayList存储字符串并遍历
*
*我们按照正常的写法来写这个程序,结果确出错了。
*为什么呢?
*因为我们开始存储的时候,存储了String和Integer两种类型的数据。
*而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。
*但是呢,它在编译期间却没有告诉我们。
*所以,我就觉得这个设计的不好。
*回想一下,我们的数组
*String[]strArray=newString[3];
*strArray[0]="hello";
*strArray[1]="world";
*strArray[2]=10;
*集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。
这样就不会在有问题了。
*而这种技术被称为:
泛型。
*
*泛型:
是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
参数化类型,把类型当作参数一样的传递。
*格式:
*<数据类型>
*此处的数据类型只能是引用类型。
*好处:
*A:
把运行时期的问题提前到了编译期间
*B:
避免了强制类型转换
*C:
优化了程序设计,解决了黄色警告线
*/
publicclassGenericDemo{
publicstaticvoidmain(String[]args){
//创建
ArrayList
//添加元素
array.add("hello");
array.add("world");
array.add("java");
//array.add(newInteger(100));
//array.add(10);//JDK5以后的自动装箱
//等价于:
array.add(Integer.valueOf(10));
//遍历
Iterator
while(it.hasNext()){
//ClassCastException
//Strings=(String)it.next();
Strings=it.next();
System.out.println(s);
}
//看下面这个代码
//String[]strArray=newString[3];
//strArray[0]="hello";
//strArray[1]="world";
//strArray[2]=10;
}
}
11泛型运用的地方
packagecn.itcast_02;
importjava.util.ArrayList;
importjava.util.Iterator;
/*
*泛型在哪些地方使用呢?
*看API,如果类,接口,抽象类后面跟的有
一般来说就是在集合中使用。
*/
publicclassArrayListDemo{
publicstaticvoidmain(String[]args){
//用ArrayList存储字符串元素,并遍历。
用泛型改进代码
ArrayList
array.add("hello");
array.add("world");
array.add("java");
Iterator
while(it.hasNext()){
Strings=it.next();
System.out.println(s);
}
System.out.println("-----------------");
for(intx=0;x Strings=array.get(x); System.out.println(s); } } } 12存储自定义对象并遍历 ArrayListDemo.java packagecn.itcast_02; importjava.util.ArrayList; importjava.util.Iterator; /* *需求: 存储自定义对象并遍历。 * *A: 创建学生类 *B: 创建集合对象 *C: 创建元素对象 *D: 把元素添加到集合 *E: 遍历集合 */ publicclassArrayListDemo2{ publicstaticvoidmain(String[]args){ //创建集合对象 //JDK7的新特性: 泛型推断。 //ArrayList //但是我不建议这样使用。 ArrayList //创建元素对象 Students1=newStudent("曹操",40);//后知后觉 Students2=newStudent("蒋干",30);//不知不觉 Students3=newStudent("诸葛亮",26);//先知先觉 //添加元素 array.add(s1); array.add(s2); array.add(s3); //遍历 Iterator while(it.hasNext()){ Students=it.next(); System.out.println(s.getName()+"---"+s.getAge()); } System.out.println("------------------"); for(intx=0;x Students=array.get(x); System.out.println(s.getName()+"---"+s.getAge()); } } } Student.java packagecn.itcast_02; /** *这是学生描述类 * */ publicclassStudent{ //姓名 privateStringname; //年龄 privateintage; publicStudent(){ super(); } publicStudent(Stringname,intage){ super(); this.name=name; this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } } 13Objec类 ObjecToolDemo.java packagecn.itcast_03; /* *早期的时候,我们使用Object来代表任意的类型。 *向上转型是没有任何问题的,但是在向下转型的时候其实隐含了类型转换的问题。 *也就是说这样的程序其实并不是安全的。 所以Java在JDK5后引入了泛型,提高程序的安全性。 */ publicclassObjectToolDemo{ publicstaticvoidmain(String[]args){ ObjectToolot=newObjectTool(); //正常使用 ot.setObj(newInteger(27)); Integeri=(Integer)ot.getObj(); System.out.println("年龄是: "+i); ot.setObj(newString("林青霞")); Strings=(String)ot.getObj(); System.out.println("姓名是: "+s); System.out.println("---------"); ot.setObj(newInteger(30)); //ClassCastException Stringss=(String)ot.getObj(); System.out.println("姓名是: "+ss); } } ObjectTool.java packagecn.itcast_03; publicclassObjectTool{ privateObjectobj; publicObjectgetObj(){ returnobj; } publicvoidsetObj(Objectobj){//Objectobj=newInteger(30); this.obj=obj; } } 14泛型的测试 ObjectToolDemo.java packagecn.itcast_04; /* *泛型类的测试 */ publicclassObjectToolDemo{ publicstaticvoidmain(String[]args){ //ObjectToolot=newObjectTool(); // //ot.setObj(newString("风清扬")); //Strings=(String)ot.getObj(); //System.out.println("姓名是: "+s); // //ot.setObj(newInteger(30)); //Integeri=(Integer)ot.getObj(); //System.out.println("年龄是: "+i); //ot.setObj(newString("林青霞")); ////ClassCastException //Integerii=(Integer)ot.getObj(); //System.out.println("姓名是: "+ii); System.out.println("-------------"); ObjectTool //ot.setObj(newInteger(27));//这个时候编译期间就过不去 ot.setObj(newString("林青霞")); Strings=ot.getObj(); System.out.println("姓名是: "+s); ObjectTool //ot2.setObj(newString("风清扬"));//这个时候编译期间就过不去 ot2.setObj(newInteger(27)); Integeri=ot2.getObj(); System.out.println("年龄是: "+i); } } ObjectTool.java packagecn.itcast_04; /* *泛型类: 把泛型定义在类上 */ publicclassObjectTool privateTobj; publicTgetObj(){ returnobj; } publicvoidsetObj(Tobj){ this.obj=obj; } } 15定义泛型方法 ObjectToolDemo.java packagecn.itcast_05; publicclassObjectToolDemo{ publicstaticvoidmain(String[]args){ //ObjectToolot=newObjectTool(); //ot.show("hello"); //ot.show(100); //ot.show(true); //ObjectTool //ot.show("hello"); // //ObjectTool //ot2.show(100); // //ObjectTool //ot3.show(true); //如果还听得懂,那就说明泛型类是没有问题的 //但是呢,谁说了我的方法一定要和类的类型的一致呢? //我要是类上没有泛型的话,方法还能不能接收任意类型的参数了呢? //定义泛型方法后 ObjectToolot=newObjectTool(); ot.show("hello"); ot.show(100); ot.show(true); } } ObjectTool.java packagecn.itcast_05; //publicclassObjectTool ////publicvoidshow(Strings){ ////System.out.println(s); ////} //// ////publicvoidshow(Integeri){ ////System.out.println(i); ////} //// ////publicvoidshow(Booleanb){ ////System.out.println(b); ////} // //publicvoidshow(Tt){ //System.out.println(t); //} //} /* *泛型方法: 把泛型定义在方法上 */ publicclassObjectTool{ public System.out.println(t); } } Inter.java packagecn.itcast_06; /* *泛型接口: 把泛型定义在接口上 */ publicinterfaceInter publicabstractvoidshow(Tt); } InterDemo.java packagecn.itcast_06; publicclassInterDemo{ publicstaticvoidmain(String[]args){ //第一种情况的测试 //Inter //i.show("hello"); ////第二种情况的测试 Inter i.show("hello"); Inter ii.show(100); } } InterImpl.java packagecn.itcast_06; //实现类在实现接口的时候 //第一种情况: 已经知道该是什么类型的了 //publicclassInterImplimplementsInter // //@Override //publicvoidshow(Stringt){ //System.out.println(t); //} //} //第二种情况: 还不知道是什么类型的 publicclassInterImpl @Override publicvoidshow(Tt){ System.out.println(t); } } 16泛型高级 packagecn.itcast_07; importjava.util.ArrayList; importjava.util.Collection; /* *泛型高级(通配符) *? : 任意类型,如果没有明确,那么就是Object以及任意的Java类了 *? extendsE: 向下限定,E及其子类 *? superE: 向上限定,E极其父类 */ publicclassGenericDemo{ publicstaticvoidmain(String[]args){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaList 子类 基础 入门
![提示](https://static.bingdoc.com/images/bang_tan.gif)