ArrayList的使用和源码分析
1.基本数据类型和包装类
这里面包装类就是基本数据类型的首字母大写,除了Integer和Character。
在这里我们就介绍一下装箱和拆箱的意思。
装箱也叫装包:把简单类型变为包装类类型
拆箱也叫拆包:把包装类类型变为简单类型
举例:
public static void main(String[] args) {
Integer a = 123;//装箱 装包
int b = a;//拆箱 拆包(隐式的)
System.out.println(a+" "+ b);
System.out.println("================");
//显式的装包
Integer a2 = Integer.valueOf(123);
Integer a3 = new Integer(123);
//显式的拆包
int b2 = a2.intValue();
double d = a2.doubleValue();
}
接下来我们来看一个例题:
那么为什么两个的结果不相同呢?
那么我们就来看看后台将int类型转化为Integer类型的valueOf方法的源码:
我们可以看到如果i>=low=-128值 或者 i<=high=127,就会返回一个值。
因为返回的是一个cache[ ]的数组,因此我们计算一下其取值范围:
因此只要是0到255之间的值,都是返回true,其他都是返回false。
2.List的使用
2.1尾插e
public static void main(String[] args) {
List<String> list = new ArrayList<>(10);
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("bit");
list2.add("hehe");
System.out.println(list2);
//使用另外一个Arraylist对list3初始化,前后必须保持一样的类型
ArrayList<String> list3 = new ArrayList<>(list2);
list3.add("hanghang");
System.out.println(list3);
}
2.2打印List
2.2.1方法一:
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("bit");
list2.add("hehe");
System.out.println(list2);
2.2.2方法2:
for循环打印:
for(int i = 0;i<list2.size();i++){
System.out.print(list2.get(i)+" ");
}
System.out.println();
2.2.3方法3:
foreach打印:
for (String s:list2) {
System.out.print(s+" ");
}
System.out.println();
2.2.4方法4:
迭代器打印(一):
Iterator<String> it = list2.iterator();
while (it.hasNext()){
//it指代第一个元素的前一个位置
System.out.print(it.next()+" ");
}
System.out.println();
迭代器打印(二):
//ListIterator的功能包括了 Iterator
ListIterator<String> it2 = list2.listIterator();
while (it.hasNext()){
//it指代第一个元素的前一个位置
System.out.print(it.next()+" ");
}
System.out.println();
2.2.5利用remove删除List中的元素
2.2.6利用迭代器中add方法给List中添加元素
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("bit");
list2.add("hehe");
//实现了List接口的,一般都可以用ListIterator来打印
ListIterator<String> it2 = list2.listIterator();
while (it2.hasNext()){
String ret = it2.next();
if(ret.equals("hello")){
it2.add("hanghang");//此时的add后面的数据是在it2后面添加进去的
//list.add("hanghang");此时就会报错,抛出异常
}else {
System.out.println(ret + " ");
}
}
System.out.println(list2);
2.2.7ArrayList的简单实用方法
ArrayList的remove方法:
那么我们来思考一个问题:
为什么刚开始new ArrayList指定的大小是0,我们add元素的时候,仍然没有报错呢?
这个主要是因为ArrayList的源码中可以扩容,欲知具体原因,我们下一章节再讲。
上一篇:
92天倒计时,蓝桥杯省赛备赛攻略来啦~
下一篇:
2023蓝桥杯JavaB部分题解
