Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >访问成员变量与创建新对象

访问成员变量与创建新对象
EN

Stack Overflow用户
提问于 2017-10-18 20:20:05
回答 2查看 45关注 0票数 2

所以我有一些代码,在一个名为min max的对象中返回数组的最小和最大值。我的问题是,在for循环中,我们是否需要在每次迭代中创建一个新的MinMax对象。或者我们可以像这样更新MinMax的成员变量:

代码语言:javascript
运行
AI代码解释
复制
globalMinMax.largest = Math.min(globalMinMax.smallest, localMinMax.smallest);
globalMinMax.smallest = Math.max(globalMinMax.largest, localMinMax.largest));

而不是每次都创建一个新的MinMax,就像我们在下面的代码中在星线上所做的那样

代码语言:javascript
运行
AI代码解释
复制
private static class MinMax {
   public Integer smallest;
   public Integer largest;

   public MinMax(Integer smallest, Integer largest) {
     this.smallest = smallest;
     this.largest = largest;
   }

   private static MinMax minMax(Integer a, Integer b) {
     return Integer.compare(b, a) < 0 ? new MinMax(b, a) : new MinMax(a, b);
   }
}

public static MinMax findMinMax(List<Integer> A) {
   if (A.size() <= 1) {
      return new MinMax(A.get(0), A.get(0));
   }

   MinMax globalMinMax = MinMax.minMax(A.get(0), A.get(1));
   // Process two elements at a time.
   for (int i = 2; i + 1 < A.size(); i += 2) {
   MinMax localMinMax = MinMax.minMax(A.get(i), A.get(i + 1));
   **********Do we need to create a new object here?*****
   globalMinMax
      = new MinMax(Math.min(globalMinMax.smallest, localMinMax.smallest),
                   Math.max(globalMinMax.largest, localMinMax.largest));
   }
   // If there is odd number of elements in the array, we still
   // need to compare the last element with the existing answer.
   if ((A.size() % 2) != 0) {
      globalMinMax
       = new MinMax(Math.min(globalMinMax.smallest, A.get(A.size() - 1)),
                   Math.max(globalMinMax.largest, A.get(A.size() - 1)));
   }
   return globalMinMax;
}
EN

回答 2

Stack Overflow用户

发布于 2017-10-18 20:30:08

这段代码对于它所做的事情来说太复杂了。您应该使用生成的MinMax类来存储列表的最小/最大值,但不应该在计算过程中使用它。

查找列表的最小/最大值很简单,如下所示:

代码语言:javascript
运行
AI代码解释
复制
int minimum = A.get(0);
int maximum = A.get(0);
for(int i=1; i < A.size(); i++){
   if(A.get(i) < minimum) minimum = A.get(i);
   if(A.get(i) > maximum) maximum = A.get(i);
}
return new MinMax(minimum, maximum);

如果您希望将MinMax类更多地合并到整个程序中,您可以向该类添加一个静态方法,称为generateMinMaxFromList,它将从提供的整数列表静态生成minMax对象。

票数 1
EN

Stack Overflow用户

发布于 2017-10-18 20:32:15

如果数据不是在多线程环境中访问的,那么更新globalMinMax将是两种解决方案中更好的一种。您也不需要旋转许多对象(特别是在循环中)来查找最小值和最大值。当您正在迭代的源集合包含大量元素时,这可能会导致开销。

但是,有一种情况是您希望在每次迭代中创建MinMax对象的新实例。这是当你启动多个线程来处理数据的时候。

注意--如果传入的列表为空,MinMax方法中的第一次检查将抛出异常。因此,检查A.size() == 0是否为该方法中的第一个语句,并执行适当的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46818583

复制
相关文章

相似问题

使用rest对多个查询嵌套资源

11

对REST中嵌套资源的权限

11

如何对嵌套的REST资源进行Swagger注释?

10

REST应用程序-嵌套资源函数实现

16

嵌套REST资源

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文