这里写目录标题
包装类
包装类是根据基本类型出现的,八大基本类型对应着八种包装类:
要注意的是:String 不是包装类。包装类的好处在于:可以完成对数据的操作。例如:把字符串变为整形:
public static void main(String[] args) {
String str = "123";
int ret = Integer.valueOf(str);
System.out.println(ret+1);
}
运行结果如下:
装箱与拆箱(装包与拆包)
- 装箱:把简单数据类型变为包装类类型
- 拆箱:把包装类类型变为简单数据类型
代码示例,这里是隐式的:
public static void main(String[] args) {
//装箱
Integer a = 123;
//拆箱
int b = a;//隐式的:因为把 Integer 变为 int 了
System.out.println(a+" "+b);
}
运行结果如下:
下面我们通过 powershell 窗口来看编译的过程:
可以看到,画圈的部分就是两次过程。第一次是通过 Integer 的 valueOf 来把 123 变成 Integer 类。第二次则是通过 Integer 的 intValue 来变成 int 类型。下面的就是字符串的拼接了。
显式拆包:
通过直接将方法写出来,一看就明白了的方法就是显式的:
public static void main(String[] args) {
//这里就是显式的装包
Integer a2 = Integer.valueOf(123);
Integer a3 = new Integer(123);
//显式的拆包
int b2 = a2.intValue();
double d = a2.doubleValue();
}
阿里面试题
下面输出是否相等:
public static void main(String[] args) {
Integer a = 123;
Integer b = 123;
System.out.println(a == b);
}
运行结果如下:
这里为 true ,如果把 a 和 b 换成 129 呢?
public static void main(String[] args) {
Integer a = 129;
Integer b = 129;
System.out.println(a == b);
}
运行结果如下:
这里就变成了 false 了。遇到问题,从焦点出发:因为这里是装箱,底层是 valueOf ,所以就从 valueOf 出发。valueOf 的范围是:[-128……127] ,就意味着取值在这个范围内就是 true ,如果出了范围的话就会 new 一个对象,所以 new 了对象之后就是 false 了。
List
List 使用
在使用 List 的时候,后面括号可以加参数,也可以不加参数,加的参数是表示容量大小:
public static void main(String[] args) {
List<String> list1 = new ArrayList<>(20);
List<String> list2 = new ArrayList<>();
}
List 是一个很大的类,这里用它下层的 ArrayList :
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println(list2);
ArrayList<String> list3 = new ArrayList<>(list2);
System.out.println(list3);
}
运行结果如下:
可以使用另外一个 Array List 对 list 初始化:这里的 list3 就是用 list2 来进行初始化。输出的时候,是按照字符串的形式来输出的。
List 的多种输出方式
直接通过字符串输出
代码示例:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println(list2);
}
运行结果如下:
通过 System.out.println(); 直接输出。
通过 for 循环打印
代码如下:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
for (int i = 0; i < list2.size(); i++){
System.out.println(list2.get(i));
}
}
输出结果如下:
通过 foreach 来输出
代码如下:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
for (String s:list2) {
System.out.println(s);
}
}
运行结果如下:
通过迭代器打印
通过使用 List 的方法:iterator 来完成输出。代码如下:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println("迭代器打印");
Iterator<String> i = list2.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
运行结果如下:
专门打印 List 的迭代器
迭代器 iterator 可以专门来打印 List 。代码如下:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println("迭代器 List 相关打印");
ListIterator<String> i2 = list2.listIterator();
while (i2.hasNext()) {
System.out.println(i2.next());//因为 i 指向空的一个 所以 next 就是下一个元素
}
}
ListIterator 和 Iterator 的关系
通过在 IDEA 编译器当中查看可以发现两者的关系如下:
ListIterator 是专门用来给 List 输出的。ListIterator 可以在输出的时候进行 add 、remove 不过要先迭代出所有元素,然后根据要求去进行增加或者删除。
删除代码示例:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
Iterator<String> i = list2.iterator();
while (i.hasNext()) {
String ret = i.next();
if (ret.equals("hello")) {
i.remove();
}else {
System.out.println(ret);
}
}
System.out.println(list2);
}
运行结果如下:
增加代码示例:
public static void main(String[] args) {
ArrayList<String> list2 = new ArrayList<>();
list2.add("hello");
list2.add("word");
list2.add("123");
System.out.println("迭代器 List 相关打印");
ListIterator<String> i2 = list2.listIterator();
while (i2.hasNext()) {
String ret = i2.next();
if (ret.equals("hello")) {
i2.add("llllll");
} else {
System.out.println(ret);
}
}
System.out.println(list2);
}
要注意的是:在 add 的时候,是增加在当前元素的下一个位置。运行结果如下:
List 的 add
默认 add
List 当中的 add 方法,默认是放在最后一个位置的:
public static void main(String[] args) {
//add 方法 默认是放到数组的最后一个位置的
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
}
运行结果如下:
通过增加一个参数 index
通过在 add 方法放第一次参数,将元素放到某个位置下面:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
list.add(0,"Lockey");
System.out.println(list);
}
运行结果如下:
把一个 List 放在另一个 List 后面
通过 List 的方法 addALL 来完成,代码如下:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
ArrayList<String> list1 = new ArrayList<>();
list1.add("qwe");
list1.add("rty");
list1.addAll(list);
System.out.println(list1);
}
运行结果如下:
删除某个值
通过 remove 方法来完成删除:
public static void main9(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(list);
boolean flag = list.remove("a");
System.out.println(flag);
System.out.println(list);
}
运行结果如下:
获取某个下标的值
通过 get 方法来完成获取:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String ret = list.get(1);
System.out.println(ret);
}
运行结果如下:
更改某个位置的值
通过 set 方法来完成:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.set(1,"d");
System.out.println(list);
}
运行结果如下:
清空 List
通过 clear 方法来完成:
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.clear();
System.out.println(list);
}
运行结果如下: