开源项目

相关文章

更多

最近更新

更多

Guava IntMath类-提供整型的Math实用方法

2019-04-23 23:21|来源: 网路

IntMath提供整型的实用方法。

类声明

以下是com.google.common.math.IntMath类的声明:

@GwtCompatible(emulated=true)public final class IntMath
   extends Object

方法

S.N. 方法及说明
1 static int binomial(int n, int k)
返回n个选择K,也被称为n和k,或Integer.MAX_VALUE的二项式系数,如果结果在一个int不适合
2 static int checkedAdd(int a, int b)
返回a和b的总和,只要它不会溢出。
3 static int checkedMultiply(int a, int b)
返回a和b的产物,只要它不会溢出。
4 static int checkedPow(int b, int k)
返回b的第k幂,只要它不会溢出。
5 static int checkedSubtract(int a, int b)
返回a和b的差,只要它不会溢出。
6 static int divide(int p, int q, RoundingMode mode)
返回除以p由q,使用指定RoundingMode的四舍五入结果。
7 static int factorial(int n)
返回n个!,也就是说,前n个正整数的乘积,如果n==0则返回1,或者是Integer.MAX_VALUE如果结果不适合在一个int值。
8 static int gcd(int a, int b)
返回a, b的最大公约数。
9 static boolean isPowerOfTwo(int x)
返回true,如果x代表两个幂。
10 static int log10(int x, RoundingMode mode)
返回基数为10的对数x,根据指定的舍入模式圆形。
11 static int log2(int x, RoundingMode mode)
返回基数为2-对数x,根据指定的舍入模式圆形。
12 static int mean(int x, int y)
返回x和y的算术平均值,取整。
13 static int mod(int x, int m)
返回x模m,一个非负的值小于m以下。
14 static int pow(int b, int k)
返回b的第k幂。
15 static int sqrt(int x, RoundingMode mode)
返回x的平方根,大概指定的舍入模式。

方法继承

这个类从以下类继承的方法:

  • java.lang.Object

IntMath 例子

选择使用任何编辑器创建以下java程序在 C:/> Guava

GuavaTester.java

import java.math.RoundingMode;
import com.google.common.math.IntMath;
public class GuavaTester {

   public static void main(String args[]){
      GuavaTester tester = new GuavaTester();
      tester.testIntMath();
   }

   private void testIntMath(){
      try{
         System.out.println(IntMath.checkedAdd(Integer.MAX_VALUE, Integer.MAX_VALUE));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println(IntMath.divide(100, 5, RoundingMode.UNNECESSARY));
      try{
         //exception will be thrown as 100 is not completely divisible by 3 thus rounding
         // is required, and RoundingMode is set as UNNESSARY
         System.out.println(IntMath.divide(100, 3, RoundingMode.UNNECESSARY));
      }catch(ArithmeticException e){
         System.out.println("Error: " + e.getMessage());
      }

      System.out.println("Log2(2): "+IntMath.log2(2, RoundingMode.HALF_EVEN));

      System.out.println("Log10(10): "+IntMath.log10(10, RoundingMode.HALF_EVEN));

      System.out.println("sqrt(100): "+IntMath.sqrt(IntMath.pow(10,2), RoundingMode.HALF_EVEN));

      System.out.println("gcd(100,50): "+IntMath.gcd(100,50));

      System.out.println("modulus(100,50): "+IntMath.mod(100,50));

      System.out.println("factorial(5): "+IntMath.factorial(5));
   }
 }

验证结果

使用javac编译器编译如下类

C:\Guava>javac GuavaTester.java

现在运行GuavaTester看到的结果

C:\Guava>java GuavaTester

看到结果。

Error: overflow
20
Error: mode was UNNECESSARY, but rounding was necessary
Log2(2): 1
Log10(10): 1
sqrt(100): 10
gcd(100,50): 50
modulus(100,50): 0
factorial(5): 120


相关问答

更多

为什么Guava不为小的ImmutableLists使用专门的类?(Why does Guava not use specialized classes for small ImmutableLists?)

你能帮我理解这里涉及的权衡吗? 这是一个权衡: 性能 - 不分配临时数组可以节省成本。 但是,人们需要进行一些广泛的代码分析和基准测试来量化这种节省。 (我怀疑在大多数应用程序中它都是微不足道的。请阅读@Voo提供的这个链接 !) 可读性 - 拥有一堆额外的重载会使javadoc混乱。 可维护性 - 有一堆重载是以不需要临时对象的方式实现的,这需要大量的复制/粘贴编程,这使得将来的代码维护更加困难。 实用程序 - 这些重载的使用频率是多少? 我希望答案“很少”。 字节码占用空间 - 这些额外的重载 ...

如何使guava缓存值永久化(How to Make guava cache value permanent)

只需从构建器中删除expireAfterWrite (它的可选功能): cache = CacheBuilder.newBuilder() .maximumSize(100) .build(....); 这样只有达到maximumSize时才会逐出条目。 Guava的缓存有很好的文档,但您也应该阅读Wiki页面 。 PS如果用“永久”表示“重新启动后会存在”,那么Guava Cache不适合你,因为它是内存缓存。 Just remove expir ...

Guava EventBus:暂停活动发布(Guava EventBus: pause event posting)

我尝试了这种模式,使用子类分类从毒丸模式派生: public class SomethingChangedEvent { private final String name; public SomethingChangedEvent(String name) { this.name = name; } @Override public String toString() { ...

是否有可能将Guava的ForwardingListIterator和PeekingIterator结合起来?(Is it possible to combine Guava's ForwardingListIterator with a PeekingIterator?)

将一个新的“窥视”概念引入到一个已经很容易在两个方向上滚动的迭代器的价值在哪里? 如果你真的想要它,你可以实现两个简单的静态助手: public static <T> T peekNext(ListIterator<T> iterator) { T next = iterator.next(); iterator.previous(); return next; } public static <T> T peekPrevious(ListIterator<T> iterator) ...

番石榴的IntervalTree(IntervalTree in Guava)

Guava没有提供这个,尽管你可以通过找到给定点之前和之后的第一个范围来在RangeSet之上构建这样的东西。 但一般来说,除了类型的比较排序之外,Guava Range对距离,度量或任何其他内容一无所知 。 他们不知道10比15更接近11 。 Guava doesn't provide this, though you might be able to build such a thing on top of a RangeSet by finding the first range befor ...

从Guava Multimap中的值返回键(Return key from value in Guava Multimap)

Guava为Multimap提供了一种反演方法。 请参见Multimaps.invertFrom 。 如果您不经常需要反演,或者您的multimap很小,这可能对您没问题。 但这种反转是一个昂贵的过程。 您可以通过简单地按照JB Nizet在评论中建议的正向和反向来获得一些效率。 然而,两者都可以是多重映射以允许非唯一性。 Guava supplies an inversion method for Multimap. See Multimaps.invertFrom. This might do ...

Guava ValueGraph的简单示例(Simple example of Guava ValueGraph)

Guava wiki提供了以下使用ValueGraph示例: MutableValueGraph<Integer, Double> weightedGraph = ValueGraphBuilder.directed().build(); weightedGraph.addNode(1); weightedGraph.putEdgeValue(2, 3, 1.5); // also adds nodes 2 and 3 if not already present weightedGraph.p ...

不兼容的库版本selenium / guava(Incompatible library version selenium / guava)

因为你对com.google.guava:guava:23.3 org.seleniumhq.selenium:selenium-java:3.0.1依赖性com.google.guava:guava:23.3使用org.seleniumhq.selenium:selenium-java:3.0.1可能会让你在十字路口。 但是Selenium发行说明清楚地提到了以下番石榴依赖性: Selenium v2.49.0 :Bump guava到19版 Selenium v3.1.0 :需要更新最新的番石 ...

如何正确使用guava Closer(How to use guava Closer properly)

从番石榴自己的解释来看,你必须使用Throwable ,是的。 这是他们的示例代码段: public void foo() throws IOException { Closer closer = Closer.create(); try { InputStream in = closer.register(openInputStream()); OutputStream out = closer.register(openOutputStream()); // d ...

使用guava AbstractScheduledService(Using guava AbstractScheduledService)

AbstractScheduledServiced实现Service 。 Service接口描述了生命周期方法,包括startAsync 。 ServiceState枚举文字包含有关其含义的文档。 处于NEW状态的服务(刚刚创建): 处于此状态的服务处于非活动状态。 它做的工作量极少,占用资源极少。 要使服务执行某些有用的操作,您必须将其转换为RUNNING状态 此状态下的服务正在运行。 这就是为什么你必须在它做任何事之前启动服务的原因。 我还建议不要从构造函数中调用startAsync,而是从创 ...