网站首页 > java教程 正文
假定我们现在想写一个方法,同时不希望它仅仅返回一样东西,而是想返回一系列东西。此时,象C 和C++这样的语言会使问题复杂化,因为我们不能返回一个数组,只能返回指向数组的一个指针。这样就非常麻烦,因为很难控制数组的“存在时间”,它很容易造成内存“漏洞”的出现。
Java 采用的是类似的方法,但我们能“返回一个数组”。当然,此时返回的实际仍是指向数组的指针。但在Java 里,我们永远不必担心那个数组的是否可用——只要需要,它就会自动存在。而且垃圾收集器会在我们完成后自动将其清除。
flavorSet()方法创建了一个名为results 的String 数组。该数组的大小为n——具体数值取决于我们传递给方法的自变量。随后,它从数组flav 里随机挑选一些“香料”(Flavor),并将它们置入results 里,并最终返回results。返回数组与返回其他任何对象没什么区别——最终返回的都是一个句柄。至于数组到底是在flavorSet()里创建的,还是在其他什么地方创建的,这个问题并不重要,因为反正返回的仅是一个句柄。一旦我们的操作完成,垃圾收集器会自动关照数组的清除工作。而且只要我们需要数组,它就会乖乖地听候调遣。
另一方面,注意当flavorSet()随机挑选香料的时候,它需要保证以前出现过的一次随机选择不会再次出现。为达到这个目的,它使用了一个无限while 循环,不断地作出随机选择,直到发现未在picks 数组里出现过的一个元素为止(当然,也可以进行字串比较,检查随机选择是否在results 数组里出现过,但字串比较的效率比较低)。若成功,就添加这个元素,并中断循环(break),再查找下一个(i 值会递增)。但假若t 是一个已在picks 里出现过的数组,就用标签式的continue 往回跳两级,强制选择一个新t。用一个调试程序可以很清楚地看到这个过程。
main()能显示出20 个完整的香料集合,所以我们看到flavorSet()每次都用一个随机顺序选择香料。为体会这一点,最简单的方法就是将输出重导向进入一个文件,然后直接观看这个文件的内容。
猜你喜欢
- 2024-10-11 JAVA练习题:定义一个数组,获取数组中最大最小值
- 2024-10-11 java中数组(二)(java数组的常见操作)
- 2024-10-11 灵魂拷问:Java如何获取数组和字符串的长度length还是length()?
- 2024-10-11 前后端分离文件上传系列:在安卓系统中将文件转换为字符串并上传
- 2024-10-11 java集合转换数组注意问题(javalist集合转换数组)
- 2024-10-11 Scala:Array(集合、序列)(scala arraylist)
- 2024-10-11 Java修炼终极指南:124 将对象序列化为字节数组
- 2024-10-11 List与String相互转化的几种方式归纳
- 2024-10-11 Java将字符串解析为Json格式(java字符串解析成数组)
- 2024-10-11 springboot项目中,前端如何传递一个自定义对象数组给后端
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)