JAVA自学-day16-List的子类、泛型、增强for循环、静态导入、可变参数
一:List的子类(掌握)
(1)List的子类特点
ArrayList:底层数据结构是数组,查询快,增删慢线程不安全,效率高Vector:底层数据结构是数组,查询快,增删慢线程安全,效率低LinkedList:底层数据结构是链表,查询慢,增删快线程不安全,效率高
(2)ArrayList
A:没有特有功能需要学习B:案例a:ArrayList存储字符串并遍历b:ArrayList存储自定义对象并遍历
(3)Vector
A:有特有功能a:添加public void addElement(E obj) -- add()b:获取public E elementAt(int index) -- get()public Enumeration<E> elements() -- iterator()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来实现。
二:泛型(掌握)
(1)泛型概述
是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。
(2)格式:
<数据类型>注意:该数据类型只能是引用类型。
(3)好处:
A:把运行时期的问题提前到了编译期间B:避免了强制类型转换C:优化了程序设计,解决了黄色警告线问题,让程序更安全
(4)泛型的前世今生:
A:泛型的由来Object类型作为任意类型的时候,在向下转型的时候,会隐含一个转型问题B:泛型类C:泛型方法D:泛型接口E:泛型高级通配符?? extends E? super E
(5)我们在哪里使用呢?
一般是在集合中使用。
三:增强for循环(掌握)
(1)是for循环的一种
(2)格式:for(元素的数据类型 变量名 : 数组或者Collection集合的对象) {使用该变量即可,该变量其实就是数组或者集合中的元素。}
(3)好处:简化了数组和集合的遍历
(4)弊端增强for循环的目标不能为null。建议在使用前,先判断是否为null。
四:静态导入(了解)
(1)可以导入到方法级别的导入
(2)格式:import static 包名....类名.方法名;
(3)注意事项:A:方法必须是静态的B:如果多个类下有同名的方法,就不好区分了,还得加上前缀。所以一般我们并不使用静态导入,但是一定要能够看懂。
五:可变参数(掌握)
(1)如果我们在写方法的时候,参数个数不明确,就应该定义可变参数。
(2)格式:修饰符 返回值类型 方法名(数据类型... 变量) {}注意:A:该变量其实是一个数组名B:如果一个方法有多个参数,并且有可变参数,可变参数必须在最后
(3)Arrays工具类的一个方法asList()把数组转成集合。注意:这个集合的长度不能改变。
六:练习(掌握)
A:集合的嵌套遍历
import java.util.ArrayList;/** 集合的嵌套遍历* 需求:* 我们班有学生,每一个学生是不是一个对象。所以我们可以使用一个集合表示我们班级的学生。ArrayList<Student>* 但是呢,我们旁边是不是还有班级,每个班级是不是也是一个ArrayList<Student>。* 而我现在有多个ArrayList<Student>。也要用集合存储,怎么办呢?* 就是这个样子的:ArrayList<ArrayList<Student>>*/public class ArrayListDemoTest {public static void main(String[] args) {// 创建大集合ArrayList<ArrayList<Student>> bigArrayList = new ArrayList<ArrayList<Student>>();// 创建第一个班级的学生集合ArrayList<Student> firstArrayList = new ArrayList<Student>();// 创建学生Student s1 = new Student("百里玄策", 27);Student s2 = new Student("后裔", 19);Student s3 = new Student("西施", 18);Student s4 = new Student("鲁班七号", 127);Student s5 = new Student("姜子牙", 77);// 学生进班firstArrayList.add(s1);firstArrayList.add(s2);firstArrayList.add(s3);firstArrayList.add(s4);firstArrayList.add(s5);// 把第一个班级存储到学生系统中bigArrayList.add(firstArrayList);// 创建第二个班级的学生集合ArrayList<Student> secondArrayList = new ArrayList<Student>();// 创建学生Student s11 = new Student("诸葛亮", 30);Student s22 = new Student("司马懿", 28);Student s33 = new Student("周瑜", 26);// 学生进班secondArrayList.add(s11);secondArrayList.add(s22);secondArrayList.add(s33);// 把第二个班级存储到学生系统中bigArrayList.add(secondArrayList);// 创建第三个班级的学生集合ArrayList<Student> thirdArrayList = new ArrayList<Student>();// 创建学生Student s111 = new Student("宋江", 40);Student s222 = new Student("吴用", 35);Student s333 = new Student("高俅", 30);Student s444 = new Student("李师师", 22);// 学生进班thirdArrayList.add(s111);thirdArrayList.add(s222);thirdArrayList.add(s333);thirdArrayList.add(s444);// 把第三个班级存储到学生系统中bigArrayList.add(thirdArrayList);//遍历集合for(ArrayList<Student> array : bigArrayList) {for(Student s : array) {System.out.println(s.getName()+"---"+s.getAge());}}}
}
B:产生10个1-20之间的随机数,要求随机数不能重复
import java.util.ArrayList;
import java.util.Random;/*
* 获取10个1-20之间的随机数,要求不能重复
*
* 用数组实现,但是数组的长度是固定的,长度不好确定。
* 所以我们使用集合实现。
*
* 分析:
* A:创建产生随机数的对象
* B:创建一个存储随机数的集合。
* C:定义一个统计变量。从0开始。
* D:判断统计变量是否小于10
* 是:先产生一个随机数,判断该随机数在集合中是否存在。
* 如果不存在:就添加,统计变量++。
* 如果存在:就不搭理它。
* 否:不搭理它
* E:遍历集合
*/public class RandomDemoTest {public static void main(String[] args) {// 创建产生随机数的对象Random r = new Random();// 创建一个存储随机数的集合ArrayList<Integer> array = new ArrayList<Integer>();// 定义一个统计变量,从0开始。int count = 0;//判断统计变量是否小于10while(count < 10) {// 产生一个随机数int number = r.nextInt(20)+1;// 判断随机数在集合中是否存在if(!array.contains(number)) {// 如果不存在:就添加,统计变量++array.add(number);count++;}}// 遍历集合for(Integer x : array) {System.out.println(x);}}
}
C:键盘录入多个数据,以0结束,并在控制台输出最大值
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;/** 键盘录入多个数据,以0结束,要求在控制台输出这多个数据中的最大值* * 分析:* A:创建键盘录入数据对象* B:键盘录入多个数据,我们不知道多少个,所以用集合存储* C:以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了* D:把集合转成数组* E:对数组排序* F:获取该数组中的最大索引的值*/
public class ArrayListDemo {public static void main(String[] args) {// 创建键盘录入数据对象Scanner sc = new Scanner(System.in);// 键盘录入多个数据,我们不知道多少个,所以用集合存储ArrayList<Integer> array = new ArrayList<Integer>();// 以0结束,这个简单,只要键盘录入的数据是0,我就不继续录入数据了while (true) {System.out.println("请输入数据:");int number = sc.nextInt();if (number != 0) {array.add(number);} else {break;}}// 把集合转成数组// public <T> T[] toArray(T[] a)Integer[] i = new Integer[array.size()];// Integer[] ii = array.toArray(i);array.toArray(i);// System.out.println(i);// System.out.println(ii);// 对数组排序// public static void sort(Object[] a)Arrays.sort(i);// 获取该数组中的最大索引的值System.out.println("数组是:" + arrayToString(i) + "最大值是:"+ i[i.length - 1]);}public static String arrayToString(Integer[] i) {StringBuilder sb = new StringBuilder();sb.append("[");for (int x = 0; x < i.length; x++) {if (x == i.length - 1) {sb.append(i[x]);} else {sb.append(i[x]).append(", ");}}sb.append("]");return sb.toString();}
}
JAVA自学-day16-List的子类、泛型、增强for循环、静态导入、可变参数相关推荐
- 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型
2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...
- java基础-迭代器(Iterator)与增强for循环
java基础-迭代器(Iterator)与增强for循环 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Iterator迭代器概述 Java中提供了很多个集合,它们在存储元素时 ...
- 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)
文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...
- java增强型for报错_Java基础——增强for循环
java1.5版本引入了一个增强for循环,基本原理和for循环类似. 语法声明:for(表达式:条件表达式) 举例:for (String str : set) 解释:set代表set集合,str代 ...
- 第三次学JAVA再学不好就吃翔(part84)--增强for循环
学习笔记,仅供参考,有错必纠 文章目录 增强for循环 增强for循环 增强for循环概述 增强for循环可以简化数组和Collection集合遍历. 格式 for(元素数据类型 变量 : 数组或者C ...
- Java总结(14) 静态导入 可变长参数
静态导入概述: import语句可以导入一个类或某个包中的所有类 import static语句导入一个类中的某个静态方法或所有静态方法 举例: import static java.lang.Mat ...
- Java中有些好的特性(一):静态导入
首先,请原谅我用了一个很土,很有争议的标题.小弟才思枯竭,实在想不出来什么文雅的了,抱歉~~ 前言 换了东家后,从一个死忠C# Fans摇身一变,客串了一把Java程序员,可能是受老赵的<Why ...
- java 增强for循环 i_java入门 -- 增强for循环
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; ...
- java静态导入_Java中越来越多地接受静态导入吗?
java静态导入 曾经有一段时间,至少在礼貌的社会中,人们普遍认为使用" 不是 "一词是不可接受的. 确实,在那个时候(也许直到今天),很多人确实(也确实)不认为这不是一个真实的词 ...
- Java是否越来越接受静态导入?
曾经有一段时间,至少在礼貌的社会中,人们普遍认为使用" 不是 "一词是不可接受的. 确实,那时(也许直到今天),许多人确实(也确实)认为不是一个真实的词. 尽管这个词并没有 引起争 ...
最新文章
- Go 知识点(06)— for range 切片并对切片进行 append 不会造成死循环
- Javabean学习纪要
- Zonbu-售价 99 美元的袖珍电脑
- Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)
- 【JDK】JDK源码分析-HashMap(1)
- 一个方法多个return_用这个方法可以快速、准确地记住一个单词的多个词义
- 微软推中文Live地图搜索服务与Office集成
- python打包成exe导入文件_【转载】将python脚本打包成exe文件
- 【微信插件】P3微信插件测试使用步骤
- 杭电OJ1002大数据相加
- 零基础学python-5.6 数字位操作与其它工具
- ALSA之PCM分析
- 实战react技术栈+express前后端博客项目(3)-- 后端路由、代理以及静态资源托管等配置说明...
- 前端能改变session吗_编程真的能改变思维方式吗?「渡一教育」
- Clone 2. 肿瘤克隆进化之不同进化模式
- SpringBoot系统监控,oshi版
- 关于视频流媒体服务器的学习记录
- 大话nbu二(netbackup的基本配置)
- java一个式子开根号语句_[基础篇]-基础知识整理-03-JAVA中的运算符
- Javascript进阶笔记
热门文章
- FreeRTOS死机原因
- 〖Python接口自动化测试实战篇⑥〗- 接口抓包工具 Chrome 的使用
- 国人自研开源项目,一款简单易用的 GitLab 替代品
- Springboot集成rabbitmq
- LaTeX参考文献_解决问题:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
- LoadLibrary无法加载DLL解决思路
- Mapped Statements collection does not contain ... Mybatis报错解决
- J2EE进阶之JSP和EL表达式 十二
- Nginx出现大量499响应码怎么办?
- android锁屏是弹出窗口,Android锁屏状态下弹出activity