基本类型和包装类
1)8种基本的数据类型分别对应了8种包装类,每个包装类都封装了一个对应的基本类型成员变量
同时还提供一些针对该数据类型的实用方法:
java.lang.Integer 对应 int
java.lang.Long 对应 long
java.lang.Double 对应 double
java.lang.Float 对应 float
java.lang.Character 对应 char
java.lang.Byte 对应 byte
java.lang.Boolean 对应 boolean
2)Integer的作用是让基本类型int作为一个引用类型去看待。这样就可以参与到面向对象的编
程方式中去了,其它包装类类似。
3)“装箱”、“拆箱”
从基本变量类型转变为引用类型的过程称之为“装箱”,反之则成为“拆箱”
eg:
装箱:
法1:Integer i = new Integer(1);
法2:Integer i = Interger.valueOf(2);
法3:Integer i = 2; 自动装箱,编译后相当于i = Interger.valueOf(2);
拆箱:
法1:int a = i.intValue();
法2:int a = i; 自动拆箱,编译后相当于a = i.intValue();
4)自动装箱,自动拆箱(java 1.5及以后版本的特性)
在编译源程序时,编译器会预处理。将未作差想和装箱工作的语句自动拆箱和装箱
5)包装类一些常用的功能
a.静态方法parseInt(String str)
可以将相应数据类型的字符串转换成该字符类型的基本类型值,但是该字符串在类型上
必须与目标类型兼容
b.静态方法toBinaryString(int i)
将int型数据转换成二进制的字符串,相应的还有十六进制、十进制等。
c.所有包装类具有的几个共通的常量
Interger.MAX_VALUE
Interger.MIN_VALUE
1)8种基本的数据类型分别对应了8种包装类,每个包装类都封装了一个对应的基本类型成员变量
同时还提供一些针对该数据类型的实用方法:
java.lang.Integer 对应 int
java.lang.Long 对应 long
java.lang.Double 对应 double
java.lang.Float 对应 float
java.lang.Character 对应 char
java.lang.Byte 对应 byte
java.lang.Boolean 对应 boolean
2)Integer的作用是让基本类型int作为一个引用类型去看待。这样就可以参与到面向对象的编
程方式中去了,其它包装类类似。
3)“装箱”、“拆箱”
从基本变量类型转变为引用类型的过程称之为“装箱”,反之则成为“拆箱”
eg:
装箱:
法1:Integer i = new Integer(1);
法2:Integer i = Interger.valueOf(2);
法3:Integer i = 2; 自动装箱,编译后相当于i = Interger.valueOf(2);
拆箱:
法1:int a = i.intValue();
法2:int a = i; 自动拆箱,编译后相当于a = i.intValue();
4)自动装箱,自动拆箱(java 1.5及以后版本的特性)
在编译源程序时,编译器会预处理。将未作差想和装箱工作的语句自动拆箱和装箱
5)包装类一些常用的功能
a.静态方法parseInt(String str)
可以将相应数据类型的字符串转换成该字符类型的基本类型值,但是该字符串在类型上
必须与目标类型兼容
b.静态方法toBinaryString(int i)
将int型数据转换成二进制的字符串,相应的还有十六进制、十进制等。
c.所有包装类具有的几个共通的常量
Interger.MAX_VALUE
Interger.MIN_VALUE
BigDecimal类
1)位于java.Math.BigDecimal,用于表示精度比Double更高的浮点型
2)创建一个BigDecimal实例,可以使用构造方法用字符串描述一个浮点数作为参数传入,也可以使用静态方法valueOf()
BigDecimal(String numberFormatString)
eg: BigDecimal num2 = new BigDecimal("3.20");
num2 = BigDecimal.valueOf("3.20");
3)四则运算
a.不能使用符号进行计算,需要调用方法。计算的返回值依然为BigDeciaml对象
加:add() 减:subtract() 乘:multipy() 除:divide()
b.除法时需注意:除法结果为无限不循环小数时,一定需要定取舍模式,否则一直计算下去会内存
溢出
eg: num3 = num2.divide(num1, 8, BigDecimal.ROUND_HALF_UP);
计算:num2/num1,保留八位小数,最后一位四舍五入
4)BigDecimal对象可以转换成基本类型,使用方法:
intValue()。
BigInteger类
1)位置java.Math.BigInteger。可以保存比long更长位数的整数,理论上内存有多大,他就能存多长
2)使用方法与BigDecimal完全一致
Collection框架及List集合
1)Collection是集合的顶级父类:一个接口。其下有两个子类:List和Set,也都是接口
List:元素可重复 List都是有序的
Set:元素不可重复 Set大部分是无序的
ArrayList
List是可重复集的父接口,有两个常用的子类实现:ArrayList和LinkedList
2) ArrayList内部结构是数组,修改效率较低,但是查询效率高。
LinkedList内部结构是链表,修改效率较高,但是查询效率低。
3)List和ArrayList均处于java.util包下
使用List不需要在创建时考虑容量。集合的容量是可以自动扩充的
4)集合可以存放任意类型的元素。但是在实际编程中发现,我们几乎不会向集合中存放一种以上不同类型的元素
eg: List<String> list = new ArrayList<String>();
指定了集合中存放的是String类型元素
5)contains(Object obj)方法,检查给定对象是否被包含在集合中
检查规则:将obj对象与集合中每个元素进行equals比较(调用元素的equals()方法),若有equals返回true
则比较结果为true,若所有元素均返回false,则最终结果是false
因此元素的equals()方法很重要
6)remove(Object obj)
调用元素的equals()方法进行比较,档equals方法返回true时,将对应元素删除。档存在多个相同元素时,只删除
第一次找到的那个
7)批量操作
addAll(Collection c)
该方法允许将集合c中的所有元素存入该集合。这里参数为Collection,表示任何集合类型都可以将其元素存入其他集合中
removeAll(Collection c)
从当前集合中删除形参集合中的元素(删交集),也是使用equals()方法实现的
retainAll(Collection c)
只保留当前集合于形参集合重复的元素(取交集),也是通过equals()方法实现的
8)其他方法
Object get(int index)
根据下表获取对应位置的元素并返回,从0开始
注意:这里的返回值默认情况下是Object,在使用时要进行类型强制转换,但是在创建时若指定了集合存放的元素类型,
则返回值会自动变为相应的元素类型
Object set(int index, Object newElement)
将index位置的元素修改为newElement,修改后会返回被修改的元素
add(int index, Object newElement)
向集合中插入一个元素,add的重载方法,插入位置后,以后的元素自动向后移动
Object remove(int index)
根据下表删除元素,返回的是被删除的元素
Object[] toArray()
集合转换为数组
T[] array = list.toArray(T[0]);
将集合按照T类型数组进行转换,得到的结果是T[]类型,而不是Object[]类型,方便了很多
迭代器
所有Collection的实现类都实现了其iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对几何元素的
迭代遍历。Iterator定义了三个方法:
boolean hasNext(); 判断指针后面是否有元素
E next(); 指针后移,返回当前元素
void remove(); 在原集合中删除刚刚返回的元素,即指针指向的元素,不能在指针没有移动的情况下连续调用两次
1)生成方法:
Iterator<String> it = list.iterator();
2)Iterator在java.util包下
* 定义的是一个接口,定义了遍历器应该有的方法,不同的集合返回的Iterator不都是同一个子类实现的
3)调用next()之前,一定要先调用haiNext()
4)在使用迭代器迭代的过程中,不能通过集合的增删操作来改变集合的元素数量,否则会引发迭代异常,要删除的方法只有
通过Iterator提供的remove()方法进行删除
1)位于java.Math.BigDecimal,用于表示精度比Double更高的浮点型
2)创建一个BigDecimal实例,可以使用构造方法用字符串描述一个浮点数作为参数传入,也可以使用静态方法valueOf()
BigDecimal(String numberFormatString)
eg: BigDecimal num2 = new BigDecimal("3.20");
num2 = BigDecimal.valueOf("3.20");
3)四则运算
a.不能使用符号进行计算,需要调用方法。计算的返回值依然为BigDeciaml对象
加:add() 减:subtract() 乘:multipy() 除:divide()
b.除法时需注意:除法结果为无限不循环小数时,一定需要定取舍模式,否则一直计算下去会内存
溢出
eg: num3 = num2.divide(num1, 8, BigDecimal.ROUND_HALF_UP);
计算:num2/num1,保留八位小数,最后一位四舍五入
4)BigDecimal对象可以转换成基本类型,使用方法:
intValue()。
BigInteger类
1)位置java.Math.BigInteger。可以保存比long更长位数的整数,理论上内存有多大,他就能存多长
2)使用方法与BigDecimal完全一致
Collection框架及List集合
1)Collection是集合的顶级父类:一个接口。其下有两个子类:List和Set,也都是接口
List:元素可重复 List都是有序的
Set:元素不可重复 Set大部分是无序的
ArrayList
List是可重复集的父接口,有两个常用的子类实现:ArrayList和LinkedList
2) ArrayList内部结构是数组,修改效率较低,但是查询效率高。
LinkedList内部结构是链表,修改效率较高,但是查询效率低。
3)List和ArrayList均处于java.util包下
使用List不需要在创建时考虑容量。集合的容量是可以自动扩充的
4)集合可以存放任意类型的元素。但是在实际编程中发现,我们几乎不会向集合中存放一种以上不同类型的元素
eg: List<String> list = new ArrayList<String>();
指定了集合中存放的是String类型元素
5)contains(Object obj)方法,检查给定对象是否被包含在集合中
检查规则:将obj对象与集合中每个元素进行equals比较(调用元素的equals()方法),若有equals返回true
则比较结果为true,若所有元素均返回false,则最终结果是false
因此元素的equals()方法很重要
6)remove(Object obj)
调用元素的equals()方法进行比较,档equals方法返回true时,将对应元素删除。档存在多个相同元素时,只删除
第一次找到的那个
7)批量操作
addAll(Collection c)
该方法允许将集合c中的所有元素存入该集合。这里参数为Collection,表示任何集合类型都可以将其元素存入其他集合中
removeAll(Collection c)
从当前集合中删除形参集合中的元素(删交集),也是使用equals()方法实现的
retainAll(Collection c)
只保留当前集合于形参集合重复的元素(取交集),也是通过equals()方法实现的
8)其他方法
Object get(int index)
根据下表获取对应位置的元素并返回,从0开始
注意:这里的返回值默认情况下是Object,在使用时要进行类型强制转换,但是在创建时若指定了集合存放的元素类型,
则返回值会自动变为相应的元素类型
Object set(int index, Object newElement)
将index位置的元素修改为newElement,修改后会返回被修改的元素
add(int index, Object newElement)
向集合中插入一个元素,add的重载方法,插入位置后,以后的元素自动向后移动
Object remove(int index)
根据下表删除元素,返回的是被删除的元素
Object[] toArray()
集合转换为数组
T[] array = list.toArray(T[0]);
将集合按照T类型数组进行转换,得到的结果是T[]类型,而不是Object[]类型,方便了很多
迭代器
所有Collection的实现类都实现了其iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对几何元素的
迭代遍历。Iterator定义了三个方法:
boolean hasNext(); 判断指针后面是否有元素
E next(); 指针后移,返回当前元素
void remove(); 在原集合中删除刚刚返回的元素,即指针指向的元素,不能在指针没有移动的情况下连续调用两次
1)生成方法:
Iterator<String> it = list.iterator();
2)Iterator在java.util包下
* 定义的是一个接口,定义了遍历器应该有的方法,不同的集合返回的Iterator不都是同一个子类实现的
3)调用next()之前,一定要先调用haiNext()
4)在使用迭代器迭代的过程中,不能通过集合的增删操作来改变集合的元素数量,否则会引发迭代异常,要删除的方法只有
通过Iterator提供的remove()方法进行删除
java的泛型机制(Java Se 1.5以后有的)
泛型的本质是参数化类型,在类、接口、方法的定义过程中,所操作的数据类型是被传入的参数指定
eg:ArrayList类的定义如下:
public ArrayList<E>{
... ...
public boolean add(E e){...}
public E get(int index){...}
}
在声明一个ArrayList对象时,使用如下方法:
ArrayList<String> list = new ArrayList<String>();
1)若在使用时没有将泛型E明确一个类型,则java默认将E变成Object
2)Iterator也支持泛型,但是这个泛型类型必须是其来源的集合的泛型类型,不能自己随便定义
3)我们自己也可以定义泛型,而且泛型类型可以定义多个。
eg:public class TestPoint<E,Y> {......
4)泛型不能是基础类型,必须是包装类或者其他类
泛型的本质是参数化类型,在类、接口、方法的定义过程中,所操作的数据类型是被传入的参数指定
eg:ArrayList类的定义如下:
public ArrayList<E>{
... ...
public boolean add(E e){...}
public E get(int index){...}
}
在声明一个ArrayList对象时,使用如下方法:
ArrayList<String> list = new ArrayList<String>();
1)若在使用时没有将泛型E明确一个类型,则java默认将E变成Object
2)Iterator也支持泛型,但是这个泛型类型必须是其来源的集合的泛型类型,不能自己随便定义
3)我们自己也可以定义泛型,而且泛型类型可以定义多个。
eg:public class TestPoint<E,Y> {......
4)泛型不能是基础类型,必须是包装类或者其他类
LinkedList类
使用方法与ArrayList一模一样,只是内部实现不同,在使用时权衡后选择使用。
使用方法与ArrayList一模一样,只是内部实现不同,在使用时权衡后选择使用。