自动拆箱和装箱
Java中的数据分为基本数据类型与引用数据类型,复习一遍:
基本数据类型:byte,short,int,long,float,double,char,boolean
引用数据类型: 数组、类、接口、(Lambda表达式)
作为面向对象的编程语言,为了让基本数据类型能够更符合Java的生态,基本数据类型对应的包装类应运而生
JDK5后,Java提供了基本数据类型和它对应的包装类的互相转换,被称为自动拆箱和装箱。
自动装箱
Integer i =100;
上述代码中,Java自动为我们完成了 int -> Integer 的类型转换,这就是自动装箱的一个实例
debug,断点追踪后,发现是自动调用了Integer类的valueOf(int)方法,源码如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
这里有一个细节需要注意,我们发现了一个定义为IntegerCache的对象,继续查看这个类的官方注解:
- Cache to support the object identity semantics of autoboxing for values between -128 and 127 (inclusive) as required by JLS.
阅读源码后,显而易见的是,Java对高频出现的 [ -128,127 ]这些int类型的数据,直接使用静态代码块初始化,定义在常量池中,支持更快速地读取和转换,意为cache。
自动拆箱
Integer i = Integer.valueOf(3);
int value = i;
自动拆箱的代码很简单,调用Number类的intInteger方法即可
/**
* Returns the value of this {@code Integer} as an
* {@code int}.
*/
public int intValue() {
return value;
}
Collection
Collection层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。
以上摘自Java 官方文档1.6
我们通常认为Collection下的三个子接口应该着重被学习:List、Set、Queue
Collection中所有的方法如下:每一种都需要熟练掌握,但是往往在它的实现类中,会有实现类特有的效果相近甚至是相同的方法,注意辨别
boolean add (E e)
确保此 collection 包含指定的元素(可选操作)。
boolean addAll (Collection < ? extends E > c)
将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
void clear ()
移除此 collection 中的所有元素(可选操作)。
boolean contains (Object o)
如果此 collection 包含指定的元素,则返回 true。
boolean containsAll (Collection < ? > c)
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean equals (Object o)
比较此 collection 与指定对象是否相等。
int hashCode ()
返回此 collection 的哈希码值。
boolean isEmpty ()
如果此 collection 不包含元素,则返回 true。
Iterator<E> iterator ()
返回在此 collection 的元素上进行迭代的迭代器。
boolean remove (Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
boolean removeAll (Collection < ? > c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
boolean retainAll (Collection < ? > c)
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
int size ()
返回此 collection 中的元素数。
Object[] toArray ()
返回包含此 collection 中所有元素的数组。
<T > T[]toArray(T[]a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
迭代器
实现这个接口允许对象成为 “foreach” 语句的目标(from JDK5)
Iterator是一个接口,需要使用它的实现类。Collection接口中有一个Iterator方法,返回的就是它的迭代器对象。
迭代器有三个常用方法
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
E next()
返回迭代的下一个元素。
void remove()
从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。
下面简单演示迭代器的使用,遍历输出集合的内容:
Iterator<String> iterator = collections.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
其实除了使用迭代器,for-each循环也可以达到相同的效果:
for (Object o : collection) {
System.out.println(o);
}
转载:https://blog.csdn.net/weixin_44413608/article/details/106165943