java进阶(二)-java小干货

java一些精干知识点分享

  • 2. java小干货
    • 2.1循环遍历
    • 2.2可变参数
    • 2.3 list和数组转化
      • 2.3.1 数组转list
      • 2.3.2 list转数组
    • 2.4 值传递和地址传递
      • 2.4.1值传递
      • 2.4.2 地址传递
      • 2.4.3易错点总结
    • 2.5 数组
      • 数组帮助类Arrays
    • 2.5 基本数据类型和包装类
    • 2.5集合
    • 2.6文件流
    • 2.7java代码块、内部类和匿名类
    • 2.8 java泛型及通配符
    • 2.9 日期类LocalDate
    • 2.10枚举
    • 2.11 java常见数据结构

2. java小干货

2.1循环遍历

数组、list、map都需要遍历循环,有下面集中循环方式
1.for ecah
list可以是一个数组、list、set

// list可以是一个数组、list、set
for(bject o :list) {}

2.Iterator迭代器
list可以是list、set类的子类

Iterator iter = list.iterator();while(iter.hasNext()){Object o = iter.next();}

3.loop with size
可以是数组、list能得到索引长度的类及子类

for(int i=0;i<list.size();i++){Object o= list.get(i);}

4.lambda表达式

 list.forEach((value)->{System.out.println(value);});

代码示例

public class GanHuo {@Testpublic void t1(){//1.for-each遍历,最简单,但无法获得索引System.out.println("=======for(Object:list)循环=========");String arrayStr[]=new String[]{"1","2","3"};//1-1 数组System.out.println("for-each遍历数组-----------");for (String s : arrayStr) {System.out.println("arrayStr:"+s);}//1-2 listList<Integer> list= Arrays.asList(1,2,3,4);System.out.println("for-each遍历list-----------");for (Integer i : list) {System.out.println("list:"+i);}//1-3 遍历mapMap<String,String> map=new HashMap<>();System.out.println("for-each遍历Map-----------");map.put("1", "111");map.put("2", "222");map.put("3", "222");//得到key的collectonSet<String> keySet=map.keySet();for(String key:keySet){System.out.println("map["+key+"]="+map.get(key));}}@Testpublic void t2(){System.out.println("=======Iterator循环================");//1-2 listList<Integer> list= Arrays.asList(1,2,3,4);System.out.println("Iterator 遍历list-----------");Iterator iter=list.iterator();while (iter.hasNext()) {System.out.println("list:"+iter.next());}//1-3 遍历mapMap<String,String> map=new HashMap<>();System.out.println("Iterator 遍历Map-----------");map.put("1", "111");map.put("2", "222");map.put("3", "222");//得到key的collectonSet<String> keySet=map.keySet();iter=keySet.iterator();while (iter.hasNext()) {String key= (String) iter.next();System.out.println("map["+key+"]="+map.get(key));}}@Testpublic void t3(){System.out.println("=======for。size循环================");//1-1 数组String arrayStr[]=new String[]{"1","2","3"};System.out.println("loop size 遍历数组-----------");for (int i = 0; i < arrayStr.length; i++) {System.out.println("arrayStr["+i+"]="+arrayStr[i]);}//1-2 listList<Integer> list= Arrays.asList(1,2,3,4);System.out.println("loop size 遍历list-----------");for (int i = 0; i < list.size(); i++) {System.out.println("list["+i+"]="+list.get(i));}}@Testpublic void t4(){System.out.println("=======lambda表达式================");//list的lambda表达式List<Integer> list= Arrays.asList(1,2,3,4);System.out.println("lambda表达式 遍历list-----------");list.forEach((value)->{System.out.println(value);});//Map的lambda表达式Map<String,String> map=new HashMap<>();System.out.println("lambda表达式 遍历Map-----------");map.put("1", "111");map.put("2", "222");map.put("3", "222");map.forEach((key, value)->{System.out.print("key = " + key);System.out.println(", value = " + value);});}}

2.2可变参数

可变参数是指不指定参数的个数

定义:
数据类型… 变量名
可变参数规范
1.可变参数本身是一个数组
2.可变参数也可传递一个数组
3.可变参数个数不受限制,可无限制,也可没有
4.如果可变参数和常规参数混合,则可变参数要放到最后
5.每个方法最多只能有一个可变参数
代码示例

public class ChangeParam {public void param(Integer... val){System.out.println("val包含:"+val.length+"个参数");for (Integer i : val) {System.out.println(i);}}/***如果一个方法里包含常规参数和可变参数,则可变参数必须放置到最后一个*/public void param1(String name,Integer age,String... likes){System.out.println("name:"+name);System.out.println("age:"+age);System.out.println("likes-----");String temp="";for (String like : likes) {temp+=like+",";}System.out.println(temp);}@Testpublic void t1(){//可以传递不受限制的个数param(1,2,3);//可以不传参数param();//也可传递数组Integer[] array={1,2,3};param(array);//常规和可变参数混合param1("蒋增奎",20,"火锅","串串","烤鸭");}
}

2.3 list和数组转化

2.3.1 数组转list

1.使用List=Arrays.asList(数组对象),最简单,但不能新增删除
2.List=new ArrayList<>(Arrays.asList(intArray)),可新增删除,但性能差
3. Collections.addAll(list对象, 数组对象);可新增删除,性能好
4.list= Stream.of(数组对象).collect(Collectors.toList());

@Testpublic void array2List(){System.out.println("=========Arrays.asList=======");//1---直接用Arrays.asList后不能再新增System.out.println("1---直接用Arrays.asList后不能再新增");//基本类型数组Integer[] intArray={1,2,3};List<Object> list1= Arrays.asList(intArray);// list1.add(4);   //不能再新增,否则要报异常printList(list1);//自定义数组TestVO[] objArray={new TestVO(1,"jzk"),new TestVO(2,"张三")};list1=Arrays.asList(objArray);printList(list1);//2--Arrays.asList作为构造参数传入,可新增,但性能差System.out.println("2--Arrays.asList作为构造参数传入,可新增,但性能差");list1=new ArrayList<>(Arrays.asList(intArray));list1.add(4);printList(list1);//3--Collections.addAll(list,数组);能新增删除,性能好System.out.println("3--Collections.addAll(list,数组);能新增删除,性能好");list1=new ArrayList<>();Collections.addAll(list1, intArray);list1.add(4);printList(list1);//4--使用 Stream;能新增删除,性能好System.out.println("4--使用 Stream;能新增删除,性能好");list1= Stream.of(intArray).collect(Collectors.toList());list1.add(4);printList(list1);}private void printList(List<Object> list){for (Object o : list) {System.out.println(o);}}

2.3.2 list转数组

核心用到list.toArray()方法
1.Object[] arrays=list.toArray(); 只能获得Object数组
2.对象数组=list.toArray(new 对象[list.size] ) ;//可以获得对应的对象数组

测试代码

@Testpublic void list2array(){List<TestVO> list=getTestVO();System.out.println("方法1:list.toArray()===========");//注意:只能用转换成Object[]数组,不能强制转化Object[] arrays=list.toArray();for (Object array : arrays) {System.out.println((TestVO)array);}System.out.println("方法2:list.toArray(数组对象)===========");//这样可获得实际的类TestVO[] vos=new TestVO[list.size()];list.toArray(vos );for (TestVO vo : vos) {System.out.println(vo);}//或者这样写System.out.println("方法3:list.toArray(数组对象)简写===========");vos=list.toArray(new TestVO[list.size()]);for (TestVO vo : vos) {System.out.println(vo);}System.out.println("方法4:String[] strings = list.stream().toArray(String[]::new);===");TestVO[] vos2=list.stream().toArray( TestVO[]::new);for (TestVO vo : vos2) {System.out.println(vo);}}private void printList(List<Object> list){for (Object o : list) {System.out.println(o);}}private List<TestVO> getTestVO(){List<TestVO> list=new ArrayList<>();list.add(new TestVO(1,"jzk"));list.add(new TestVO(2,"张三"));return list;}

2.4 值传递和地址传递

在学习 Java 编程语言的过程中,我们经常会听到“值传递”和“地址传递”这两个概念。它们是用来描述参数传递方式的术语,而理解它们的区别对于编写高效的代码非常重要。在本文中,我们将详细介绍这两种传递方式,并通过代码示例来说明它们的差异。

2.4.1值传递

在 Java 中,基本数据类型(如整数、布尔值等)都是以值传递的方式进行参数传递。这意味着当我们将一个基本数据类型作为参数传递给一个方法时,方法内部会创建一个新的变量来存储这个参数的值,而不会影响原始的变量。

执行过程

  • 首先,在调用方法时,将实际参数的值复制一份,并将这份副本传递给方法进行操作。
  • 在方法内部,这个副本的值被赋给一个新的局部变量。
  • 在方法执行过程中,对该局部变量的任何改动都不会影响原始的变量,因为它们指向的是不同的内存空间。
  • 当方法执行完毕后,这个局部变量和方法的栈帧都会被销毁,而原始的变量的值保持不变。

基本数据类型的传递过程中,传入的值被复制到方法内部,并在方法内部进行操作,但不会影响原始变量的值。

@Testpublic void valPass(){String str="a";double db= Double.parseDouble("34.5");Double db1=45.2;Integer zs=Integer.valueOf(100);int zs1=200;boolean b=false;Boolean b1= true;System.out.println("str="+str);System.out.println("db="+db);System.out.println("db1="+db1);System.out.println("zs="+zs);System.out.println("zs1="+zs1);System.out.println("b="+b);System.out.println("b1="+b1);change1(str,db,db1,zs,zs1);System.out.println("str="+str);System.out.println("db="+db);System.out.println("db1="+db1);System.out.println("zs="+zs);System.out.println("zs1="+zs1);}private void change1(String str,double db,Double db1,int zs,Integer zs1){System.out.println("============change==========");str="b";db=-45.2;db1=-22.4;zs=-1;zs1=-2;}

执行效果,可以看出这些都是值传递,被引用后并没有改变以前值:

str=a
db=34.5
db1=45.2
zs=100
zs1=200
b=false
b1=true
============change==========
str=a
db=34.5
db1=45.2
zs=100
zs1=200

2.4.2 地址传递

与基本数据类型不同,Java 中的对象类型(如数组、集合、自定义类等)则是以地址传递的方式进行参数传递。这意味着当我们将一个对象作为参数传递给一个方法时,方法内部使用的是这个对象的引用,而不是对象本身。

执行过程

  • 创建一个对象并将其引用赋值给一个变量。

  • 将这个变量作为参数传递给一个方法。

  • 在方法内部,参数变量接收到了对原始对象的引用。

  • 在方法内部修改参数变量所指向的对象时,原始对象也会受到影响。

  • 方法执行完毕后,返回到原始调用处,可以通过原始变量访问到被修改后的对象。

对象的引用传递意味着传递的是对象的引用,通过引用可以访问和修改原始对象的属性。

测试代码:

 @Testpublic void addressPass(){StringBuffer sb=new StringBuffer("aa");TestVO vo=new TestVO(1,"蒋增奎");String[] array={"1","2","3"};List<Integer> list=new ArrayList<>();list.add(1);list.add(2);Map<String,Integer> map=new HashMap<>();map.put("1", 11);map.put("2", 22);System.out.println("sb:"+sb);System.out.println("vo:"+vo);System.out.println("array:"+ Arrays.toString(array));System.out.println("list:"+Arrays.toString(list.toArray()));System.out.println("map:"+map.toString());System.out.println("================");change2(sb,vo,array,list,map);System.out.println("sb:"+sb);System.out.println("vo:"+vo);System.out.println("array:"+ Arrays.toString(array));System.out.println("list:"+Arrays.toString(list.toArray()));System.out.println("map:"+map.toString());}private  void change2( StringBuffer sb, TestVO vo,String[] array,List<Integer> list,Map<String,Integer> map){sb.append("dd");vo.setName("蒋大爷");array[0]="改值11";list.add(3);map.put("3",333);}

效果,地址引用值都会被改变

sb:aa
vo:TestVO(id=1, name=蒋增奎)
array:[1, 2, 3]
list:[1, 2]
map:{1=11, 2=22}
================
sb:aadd
vo:TestVO(id=1, name=蒋大爷)
array:[改值11, 2, 3]
list:[1, 2, 3]
map:{1=11, 2=22, 3=333}

2.4.3易错点总结

易错点
java对象:String ,int等对应的封装类Integer,java.util.Date,BigDecimal是值传递,不是地址传递,虽然他们是对象

值传递VS地址传递

在这里插入图片描述

2.5 数组

数组帮助类Arrays

2.5 基本数据类型和包装类

2.5集合

2.6文件流

2.7java代码块、内部类和匿名类

2.8 java泛型及通配符

2.9 日期类LocalDate

2.10枚举

2.11 java常见数据结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/486266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器直觉

来源&#xff1a;专知当前以深度学习代表的人工智能技术所能解决的问题往往需要具有大量可以借鉴学习的训练 集, 同时要求所获取的信息是完备的. 但在复杂时变的真实应用环境中, 采集到的数据往往包含大量 噪声与不确定性, 且仅包含环境的局部信息, 导致了基于深度学习的人工智…

vb.net读取excel并写入dgv_读取PDF中的表格写入EXCEL?30行代码搞定

办公自动化系列1现在&#xff0c;各类数据分析的书籍&#xff0c;都可以在网上找到PDF版本&#xff1b;同时&#xff0c;百度文库、各类数据统计文库、行业研究等众多论文报告&#xff0c;是通过PDF的形式去展示输出的&#xff1b;但是&#xff0c;令人都头疼的是&#xff0c;各…

英媒:人工智能终于接近人类智能了吗?

文章来源&#xff1a;金融时报作者&#xff1a;John Thornhill图片来源&#xff1a;网络编辑&#xff1a;江上波摘要&#xff1a;GPT-3被誉为人工智能领域的重大突破&#xff0c;有人认为它甚至显示出初步意识迹象&#xff0c;另一些人则指出GPT-3存在可笑的缺陷。它可以大量炮…

大创中期报告怎么写_课题研究中期报告怎么写?这篇范文很说的很详细

中期报告一般要求1.课题简介&#xff1a;课题由来、课题界定、研究目标、课题研究内容。2.研究情况&#xff1a;按时间顺序或内容板块有条理地说明研究工作的开展情况&#xff1b;有详有略、有主有次地陈述研究过程中做了什么、怎么做的。3.阶段成果&#xff1a;客观地阐明本课…

vba九九乘法表代码_VBA代码模块化--数据透视表

本周工作中&#xff0c;用到了数据透视表的操作&#xff0c;这里汇总一下&#xff0c;学习途径来自网络&#xff0c;学习成果我也乐于分享一二~&#xff0c;代码整理为模块&#xff0c;供大家举一反三&#xff0c;可以套用。① 创建数据透视表&#xff0c;及基本设置先展示数据…

IoT 、5G与边缘计算将会擦出怎样的火花?

来源&#xff1a;半导体行业观察边缘计算是数字世界中最令人兴奋的新概念之一。利用占用空间很少的微型数据中心网络&#xff0c;边缘计算使系统能够实时收集并分析重要数据&#xff0c;而不会增加现有基础设施的负担。在物联网系统中&#xff0c;通常以端到端的方式&#xff0…

“嫦娥上月球挖土”!打破尘封44年的人类历史,中国航天实现“五个首次”...

资料来源&#xff1a;人民网、中国新闻网、智东西等物联网智库 整理发布转载请注明来源和出处3&#xff01;2&#xff01;1&#xff01;点火&#xff01;随着一声声振奋人心的倒计时&#xff0c;北京时间11月24日4时30分&#xff0c;搭载嫦娥五号月球探测器的长征五号遥五运载火…

就php干活,php可以做什么?,懂得这些技巧就够了

PHP&#xff0c;是英文超文本预处理语言Hypertext Preprocessor的缩写。PHP 是一种 HTML 内嵌式的语言&#xff0c;是一种在服务器端执行的嵌入HTML文档的脚本语言&#xff0c;语言的风格有类似于C语言&#xff0c;被广泛地运用。工具/材料电脑PHP操作方法011、运行在服务器端&…

世界上有没有无法破解的密码?揭秘量子通信 | 图图是道

来源&#xff1a;文章2020年11月23日发表于《中国日报》的微信公众号 图图是道科学顾问 / 中国科学技术大学副教授 袁岚峰监制 / 柯荣谊 联合监制 / 邢志刚 统筹 / 张若琼总策划 / 王晓莹 主笔 / 张周项 绘制 / 吴洋未来智能实验室的主要工作包括&#xff1a;建立AI智能…

从源码的角度再看 React JS 中的 setState

在这一篇文章中&#xff0c;我们从源码的角度再次理解下 setState 的更新机制&#xff0c;供深入研究学习之用。 在上一篇手记「深入理解 React JS 中的 setState」中&#xff0c;我们简单地理解了 React 中 setState “诡异”表现的原因。 源码的部分为了保证格式显示正常就截…

科普|深度解析5G与未来天线技术

来源&#xff1a;电子万花筒过去二十年&#xff0c;我们见证了移动通信从1G到4G LTE的转变。在这期间&#xff0c;通信的关键技术在发生变化&#xff0c;处理的信息量成倍增长。而天线&#xff0c;是实现这一跨越式提升不可或缺的组件。按照业界的定义&#xff0c;天线是一种变…

平行进化论再添证据 牙形刺远隔千里却发育模式相同

来源&#xff1a;科技日报记者&#xff1a;聂翠蓉平行进化观点认为&#xff0c;具有共同祖先的有机体即使彼此被分隔在相距千里的不同地域&#xff0c;也会以同样的方式进化。据物理学家组织网11月23日报道&#xff0c;德国爱尔兰根-纽伦堡大学和加拿大卡尔加里大学的古生物学家…

word光标一直闪动_6个一分钟就能学会的Word实用小技巧,你会几个?【Word教程】...

点击图片 1元抢购 Excel、Word、PPT全套课程你用word有几年了&#xff1f;一年、两年、三年......甚至更久&#xff1f;我相信你应该也是曾受到Word折磨的人吧&#xff01;为什么&#xff1f;因为曾有很多人都不知道Word的一些小技巧&#xff0c;因此工作上浪费了不少时间。于…

timewait php,timewait是什么意思

一、IME_WAIT的意思是结束了这次连接。二、以tcp中time_wait状态为例如下&#xff1a;1、简单来说&#xff1a;time_wait状态是四次挥手中server向client发送FIN终止连接后进入的状态。2、从上图能够看到time_wait状态存在于client收到serverFin并返回ack包时的状态 &#xff0…

DARPA新局长维多利亚·科尔曼展望未来发展

来源&#xff1a;空天防务观察2020年11月20日&#xff0c;美空军协会《空军杂志》网站报道称&#xff0c;在入主美国防部国防高级研究计划局&#xff08;DARPA&#xff09;之前&#xff0c;新任局长维多利亚科尔曼&#xff08;Victoria Coleman&#xff09;大多数职业生涯都在五…

死磕JDK源码之String

String本质是对char数组的封装 Serializable接口 实现Serializable接口的类可以被序列化 Comparable接口 实现Comparable接口的类可以支持排序&#xff0c;需要重写的compareTo方法返回两个字符串中第一个不同的字符的ASCII码差值 CharSequence接口 多态&#xff0c;String、St…

一个神奇的测试_这4个在线黑科技工具拥有神奇的魔法,值得收藏!

本期神器妹分享4个超实用在线黑科技工具&#xff0c;其典型特点就是无需安装任何软件&#xff0c;打开网址就可以使用&#xff0c;另外就是个个都有其独到之处&#xff0c;用起来也很爽。下面来详细介绍这4个工具&#xff1a;2.万能命令这是一个神奇的在线工具效率平台&#xf…

量子纠缠背后的故事(廿五):深藏幕后的神秘力量

来源&#xff1a;程鹗科学网博客。链接地址&#xff1a;http://blog.sciencenet.cn/blog-3299525-1259740.html 还只有四五岁时&#xff0c;爱因斯坦有次生病&#xff0c;父亲给了他一个指南针玩耍。小小的爱因斯坦立刻着了迷。成年后&#xff0c;他多次回顾那次经历&#xff0…

vuerouter传参方式_VUE Router学习原理(一)

点击蓝字 关注我们Vue Router一. 安装二. 导入三. 说明四. 使用4.1 静态页面跳转4.2 动态页面跳转4.3 子路由4.4 通过程序传参4.5 同时(同级)展示多个视图4.6 导航钩子壹安装shellcnpm i vue-router -S贰导入jsimport Vue from vue;import VueRouter from vue-router;Vue.use(V…

php为图片添加渐变背景,HTML_CSS实例:通过定义渐变边框给图片加阴影,一般我们可以使用背景图的方 - phpStudy...

CSS实例:通过定义渐变边框给图片加阴影一般我们可以使用背景图的方式给图片添加阴影&#xff0c;但对于不固定尺寸的图片如何实现呢&#xff1f;我们可以采取“视觉欺骗大法”——定义渐变边框来实现代码&#xff1a;body {background:#2e334d;}img {border:none;}a.pic-shadow…