包装类
-
基本数据类型使用起来方便,但没有对应的方法来操作基本类型的数据。我们可以使用一个类,把基本数据类型封装起来,在类中定义一些方法,这个类叫包装类。
-
装箱:把基本数据类型的数据,包装到类中
- 构造方法
Integer(int value)
构造一个新分配的Integer
对象,它表示指定的int
值。
Integer(String s)
构造一个新分配的Integer
对象,它表示String
参数所指示的int
值。 - 静态方法
static Integer valueOf(int i)
返回一个指定的int
值的Integer
实例。
static Integer valveOf(String s)
返回一个指定的String
值的Integer
实例。
- 构造方法
-
拆箱:在包装类中取出基本类型的数据。
成员方法
int intValue()
以int
类型返回该Integer
的值。 -
自动装箱与自动拆箱:基本类型的数据和包装类之间可以自定的相互转化。
基本类型与字符串之间的转换
-
基本类型转换为
String
- 基本类型直接与
""
相连接即可。 - 先把基本数据类型装箱,再用对象的
toString()
方法。 String类的valueOf
方法。
- 基本类型直接与
-
String
转换成对应的基本数据类型。public static byte parseByte(String s):
将字符串参数转化成对应的byte
类型。public static short parseShort(String s):
将字符串参数转化成对应的short
类型。public static int parseint(String s):
将字符串参数转化成对应的int
类型。public static long parseLong(String s):
将字符串参数转化成对应的long
类型。public static float parseFloat(String s):
将字符串参数转化成对应的float
类型。public static double parseDouble(String s):
将字符串参数转化成对应的double
类型。public static boolean parseBoolean(String s):
将字符串参数转化成对应的boolean
类型。
Collection集合
-
Collection
接口定义的是所有单列集合中共性的方法,所有的单列集合都可以使用的公共方法。List
接口和Set
接口都继承自Collection
接口 -
List
接口的集合- 有序的集合(存储和取出元素的顺序相同)
- 允许存储重复的元素
- 有索引,可以使用普通的for循环遍历。
- 如:
Vector
集合,ArrayList
集合,LinkedList
集合
-
Set
接口集合- 不允许存储重复的元素。
- 没有索引(不能使用普通的
for
循环遍历)。 - 如
TreeSet
集合,HashSet
集合,LinkedHashSet
集合,其中TreeSet
集合,HashSet
集合为无序集合,存取元素的顺序可能不一致。
-
Collection
常用的功能public boolean add(E e):
把给定的对象添加到集合中。public void clear():
清空集合中的所有元素。public boolean remove(E e):
把给定的对象在当前集合中删除。public boolean contains(E e):
判断当前集合中是否包含给定的对象。public boolean isEmpty():
判断当前集合是否为空。public int size():
返回集合中元素的个数。public Object[] toArray():
把集合中的元素,存储到数组中。
Iterator迭代器
- 迭代:即
Collection
集合元素的通用获取方式。在取出元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有,就继续取出来。知道取出集合中的所有元素。这种取出方式专业术语称为迭代。 Iterator
接口:迭代器boolean hasNext():
如果仍有元素可以迭代,则返回true
。E next():
返回迭代的下一个元素。
Iterator
迭代器,是一个接口,我们无法直接使用,需要使用Iterator
接口的实现类对象,获取方式比较特殊。Collection
接口中有一个方法,叫iterator()
,这个方法的返回值就是迭代器的实现类对象。Iterator<E> iterator()
,返回在此Collection
的元素上进行迭代的迭代器。- 迭代器的使用步骤
- 使用集合中的方法
iterator()
,获取迭代器的实现类对象,使用Iterator
接口接收(多态)。 - 使用
Iterator
接口中的方法hasNext
判断是否还有下一个元素。 - 使用
Iterator
接口中的方法Next
取出集合中的下一个元素。
- 使用集合中的方法
- 增强
for
循环:底层使用的也是迭代器,使用for
循环的格式,简化了迭代器的书写。 - 增强
for
循环必须有被遍历的目标,目标只能是Collection
或者数组。
泛型
-
泛型是一种未知的数据类型。
-
泛型也可以看作一个变量,用来接收数据类型。
-
创建集合使用泛型:
- 好处
- 避免了类型转换的麻烦,存储什么类型,取出的就是什么类型。
- 把运行期异常,提升到了编译期异常。
- 弊端
- 泛型是什么类型,就只能存储什么类型
- 好处
-
创建集合对象,不使用泛型:
- 好处
- 集合不使用泛型,默认的就是
object
类型,可以存储任意类型的对象。
- 集合不使用泛型,默认的就是
- 弊端
- 不安全,会引发异常
- 好处
-
可以创建含有泛型的类。
-
可以定义含有泛型的方法。
- 泛型定义在方法的修饰符和返回值类型之间。
- 格式:
修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){
方法体。
}
-
定义含有泛型的接口。
- 第一种使用方式:定义接口的实现类,实现接口,指定接口的泛型。
- 第二种使用方式:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走。
-
泛型通配符:不知道使用什么类型来接收的时候,可以使用
?
,?
表示未知通配符。- 注意:不能创建对象使用,只能做为方法的参数使用。
-
通配符高级使用----受限泛型。
- 泛型的上限
- 格式:类型名称
<? extend 类>
对象名称 - 意义:只能接收该类型及其子类
- 格式:类型名称
- 泛型的下限
- 格式:类型名称
<? super 类>
对象名称 - 意义:只能接收该类型及其父类型。
- 格式:类型名称
- 泛型的上限