자바에서 큰 숫자를 다룰 때, long과 BigInteger를 주로 사용한다. 이 두 자료형은 숫자의 크기와 성능 면에서 차이가 있다.
long은 일반적으로 큰 수를 처리하는 데 충분하지만, 2^63 이상의 숫자를 다룰 때는 한계가 있다.
BigInteger는 범위 제한 없이 큰 숫자를 처리할 수 있지만, 속도와 메모리 사용에서 비용이 발생한다.
// 문자열로 생성
BigInteger bigInteger = new BigInteger("123456");
//n진수 문자열로 생성
BigInteger bigInteger = new BigInteger("FFFF", 16);
//valueOf 생성
BigInteger bigInteger = BigInteger.valueOf(123456);
//연산
BigInteger bigNum = new BigInteger("3");
System.out.println("3+3="+bigNum.add(BigInteger.valueOf(3)));
System.out.println("3-3="+bigNum.subtract(BigInteger.valueOf(3)));
System.out.println("3*3="+bigNum.multiply(BigInteger.valueOf(3)));
System.out.println("3/3="+bigNum.divide(BigInteger.valueOf(3)));
System.out.println("3%3="+bigNum.mod(BigInteger.valueOf(3)));
//비교
System.out.println(BigInteger.valueOf(3).compareTo(BigInteger.valueOf(3)));//0
System.out.println(BigInteger.valueOf(3).compareTo(BigInteger.ONE));//1
System.out.println(BigInteger.ONE.compareTo(BigInteger.valueOf(3)));//-1
//정렬
String []s= {"3","4","8","6","1","2"};
//Arrays.sort()를 이용 BigInteger의 compareTo를 이용한다
Arrays.sort(s, 0, 6, (s1, s2)->(new BigInteger(s2).compareTo(new BigInteger(s1))));//내림차순
for(int i=0;i<6;i++) {
System.out.print(s[i]+" ");
}
System.out.println();
Arrays.sort(s, 0, 6, (s1, s2)->(new BigInteger(s1).compareTo(new BigInteger(s2))));//오름차순
for(int i=0;i<6;i++) {
System.out.print(s[i]+" ");
//변환
BigInteger bigNumber = BigInteger.valueOf(12345);
System.out.println(bigNumber.intValue());//BigIntger -> int
System.out.println(bigNumber.longValue());//BigIntger -> long
System.out.println(bigNumber.floatValue());//BigIntger -> float
System.out.println(bigNumber.doubleValue());//BigIntger -> double
System.out.println(bigNumber.toString());//BigIntger -> String