java基本类型、数组、集合对应的包装类详解

本文主要是整理了近期所阅书籍而成。

第一个,基本类型的包装类:


基本数据类型:byte,int,       short, long, boolean,char,       float,double等

包装类型     : Byte,Integer,Short,Long,Boolean,Character,Float,Double等

基本类型(primitive type)
不用new来创建变量,而是创建一个并非是“引用”的“自动”变量。这个变量拥有它的“值”,并置于堆

栈中,因此更加高效。要确定每种基本类型所占存储空间的大小。
基本类型            大小           最小值             最大值         包装器类型
boolean                -             -                   -         Boolean
char              6bit              Unicode 0      Unic ode 2(16)-1   Character
byte                       8bit                  -128                +127               Byte
short                      16bit                   -2(15)             2(15)-1           Short
int                          32bit                  -2(31)              2(31)-1           Integer
long                       64bit                 -2(63)              2(63)-1           Long
float                       32bit                 IEEE754           IEEE754          Float
double                   64bit               IEEE754            IEEE754          Double
void                        -                       -                        -                 Void

Java整型

int4字节(32位)-2147483648 ~ 2147483647   (正好超过20亿)
short2字节(16位)-32768 ~ 32767
long8字节(64位)-9223372036854775808 ~ 9223372036854774807
byte1字节(8位)-128 ~ 127



       浮点类型

float4字节(32位)大约±3.40282347E+38F (有效位数为6-7位)
double8字节(64位)大约±1.79769313486231570E+308 (有效位数为15位)

一些需要注意:

1 if (x  ==  Double.NaN)   //  is never true


1 if (Double.isNaN(x))   //  check whether is "not a number"


       浮点数值不适合用于禁止出现舍入误差的金融计算中。例如System.out.println( 2.0 - 1.1);将打印0.899999999999999,而不是0.9。因为浮点数值采用二进制系统表示,而二进制无法精确表示分数1/10,就像十进制无法精确表示1/3一样。如果需要在数值计算中不含有舍入误差,就应该使用BigDecimal类。


一、 包装类(Wrapper Class)共同的方法

值得说明的是,java是可以直接处理基本类型的,但是在有些情况下我们需要将其作为对象来处理,这时就需要将其转化为包装类了.所有的包装类(Wrapper Class)都有共同的方法,他们是:

(1)带有基本值参数并创建包装类对象的构造函数.如可以利用Integer包装类创建对象,Integer obj=new Integer(145);

(2)带有字符串参数并创建包装类对象的构造函数.如new Integer("-45.36");

(3)可生成对象基本值的typeValue方法,如obj.intValue();

(4)将字符串转换为基本值的 parseType方法,如Integer.parseInt(args[0]);

(5)生成哈稀表代码的hashCode方法,如obj.hasCode();

(6)对同一个类的两个对象进行比较的equals()方法,如obj1.eauqls(obj2);

(7)生成字符串表示法的toString()方法,如obj.toString().

转换关系:

基本类型------>包装器类
Integer obj=new Integer(145);

包装器类------>基本类型
int num=obj.intValue();

字符串------>包装器类
Integer obj=new Integer("-45.36");

包装器类------>字符串包装器类

String str=obj.toString();

字符串------>基本类型
int num=Integer.parseInt("-45.36");

基本类型------>字符串包装器类

String str=String.valueOf(5);


        在一定的场合,运用java包装类来解决问题,能大大提高编程效率.

二、JDK1.5的新特性:自动装包/拆包(Autoboxing/unboxing)

  自动装包/拆包大大方便了基本类型数据和它们包装类地使用。

  自动装包:基本类型自动转为包装类.(int >> Integer)

  自动拆包:包装类自动转为基本类型.(Integer >> int)

  在JDK1.5之前,我们总是对集合不能存放基本类型而耿耿于怀,现在自动转换机制
解决了我们的问题。

int a = 3;
Collection c = new ArrayList();
c.add(a);//自动转换成Integer.

Integer b = new Integer(2);
c.add(b + 2);

  这里Integer先自动转换为int进行加法运算,然后int再次转换为Integer.


第二个,数组包装类

java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:
² 给数组赋值:通过fill方法。
² 对数组排序:通过sort方法,按升序。
² 比较数组:通过equals方法比较数组中元素值是否相等。
² 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。
 
 
import java.util.Arrays;
public class TestArrays {
public static void output(int[] array) {
if (array!=null) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
}
System.out.println();
}
public static void main(String[] args) {
int[] array = new int[5];
//填充数组
Arrays.fill(array, 5);
System.out.println("填充数组:Arrays.fill(array, 5):");
TestArrays.output(array);
 
//将数组的第2和第3个元素赋值为8
Arrays.fill(array, 2, 4, 8);
System.out.println("将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):");
TestArrays.output(array);
 
int[] array1 = {7,8,3,2,12,6,3,5,4};
//对数组的第2个到第6个进行排序进行排序
Arrays.sort(array1,2,7);
System.out.println("对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):");
TestArrays.output(array1);
 
//对整个数组进行排序
Arrays.sort(array1);
System.out.println("对整个数组进行排序:Arrays.sort(array1):");
TestArrays.output(array1);
 
//比较数组元素是否相等
System.out.println("比较数组元素是否相等:Arrays.equals(array, array1):"+"\n"+Arrays.equals(array, array1));
int[] array2 = array1.clone();
System.out.println("克隆后数组元素是否相等:Arrays.equals(array1, array2):"+"\n"+Arrays.equals(array1, array2));
 
//使用二分搜索算法查找指定元素所在的下标(必须是排序好的,否则结果不正确)
Arrays.sort(array1);
System.out.println("元素3在array1中的位置:Arrays.binarySearch(array1, 3):"+"\n"+Arrays.binarySearch(array1, 3));
//如果不存在就返回负数
System.out.println("元素9在array1中的位置:Arrays.binarySearch(array1, 9):"+"\n"+Arrays.binarySearch(array1, 9));
}
}
 
输出结果:
填充数组:Arrays.fill(array, 5):
5 5 5 5 5
将数组的第2和第3个元素赋值为8:Arrays.fill(array, 2, 4, 8):
5 5 8 8 5
对数组的第2个到第6个元素进行排序进行排序:Arrays.sort(array,2,7):
7 8 2 3 3 6 12 5 4
对整个数组进行排序:Arrays.sort(array1):
2 3 3 4 5 6 7 8 12
比较数组元素是否相等:Arrays.equals(array, array1):
false
克隆后数组元素是否相等:Arrays.equals(array1, array2):
true
元素3在array1中的位置:Arrays.binarySearch(array1, 3):
1
元素9在array1中的位置:Arrays.binarySearch(array1, 9):
-9


第三个,集合类包装类

在java.util包中,有一个专门对集合进行操作的类Collentions,如集合元素排序、求最大和最小值等,该类的方法均是静态的,可以直接 使用类名进行调用。由于Collections类包含多个在集合上操作的方法和相应的算法,因此称该类为集合的包装器,是集合的包装类。

集合包装器类Collections常用方法如下:

(1)copy方法:用于列表集的复制,将所有元素从源列表复制到目标列表,列表集就是实现List<E>接口的集合。copy方法的调用 方法如下。

Collections.copy(dest,source)

其中目标列表dest的元素个数不能少于源列表source的元素个数。

(2)fill方法。用给定的元素填充列表中的所有元素。调用 方式如下

Collections.fill(list,obj)

(3)indexOfSubList方法。返回源列表中第一次出现的目标列表的起始位置,不存在 则返回-1.调用方式如下

Collections.indexOfSubList(source,target)

  (4)lastIndexOfSubList方法:返回源列表中最后一次出现的目标列表的起始位置,不存在则返回-1.调用方式如下

Collections.lastIndexOfSubList(source,target)

(5)max方法:根据元素的自然顺序,返回集合的最大元素,调用方式如下:

Collections.max(collection)

(6)min方法:根据元素的自然顺序,返回集合的最小元素,调用方式如下 

Collections.min(collection)

(7)reverse方法:反转列表中元素的顺序。调用方式如下:

Collections.reverse(list)

(8)sort方法:根据元素的自然顺序对列表按升序进行排序。调用方式如下

Collections.sort(list)


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值