笔记|List的用法和使用

目录

一、泛型
1.1为什么引入泛型
1.2什么是泛型
1.3泛型类的使用
二、包装类的使用
2.1什么是包装类
2.2自动、手动封箱和装箱
三、List的常用方法
3.1list中的添加
3.2list中的删除
3.3list中的获取和修改
3.4list中的查找
3.5list中的截取和清空
3.6ArrayList和LinkedList的构造方法
四、杨辉三角的练习
一、泛型 1.1为什么引入泛型 接下来我们就来看一段代码
笔记|List的用法和使用
文章图片

我们会发现当把MyArrayList中定义int类型的数组时,向其中添加的元素就只能是int类型,添加其他类型就会报错,而当我们用Object类型代替时,Object过于通用。针对上述问题,我们引入泛型来进行修改,让代码更加的通用。
1.2什么是泛型 泛型有
占位符,表示当前的类是一个泛型类

class MyArrayList{}

这样我们就可以将这个类的其他部分用替换掉了,使用时就可以更加的方便。
class MyArrayList{ public T[] elem; public int useSize; public MyArrayList(){ this.elem=(T[]) new Object[10]; } public void add(T value){ this.elem[useSize]=value; this.useSize++; } public T get(int key){ return this.elem[key]; } }

注意:
this.elem=(T[]) new Object[10]; 不能写成this.elem=new T[10];
java的底层数组有一定的问题ArrayList不是Array的父类,但是Object是Integer的父类。
1.3泛型类的使用 定义的里面的类容只能是String类型,自动对类型进行检测:
【笔记|List的用法和使用】笔记|List的用法和使用
文章图片

可以自动对类型进行转换:
String s=myArrayList.get(0);

注意:泛型的泛型参数只能是类类型或者简单类型的包装类。
泛型的擦除机制:
当我们编写一个新的类时我们进行对比我们会发现
MyArrayList myArrayList=new MyArrayList<>(); System.out.println(myArrayList); Person person=new Person<>(); System.out.println(person);

笔记|List的用法和使用
文章图片

它们的结果并没有泛型,这是我们可以得出泛型只存在于编译期间,而不存在于运行期间。运行时会将T变为Object类。

二、包装类的使用 2.1什么是包装类 包装类就是对基本数据结构进行包装,使它们拥有一定的方法更方便的满足使用。
笔记|List的用法和使用
文章图片

基本数据类型和包装类的关系如下图所示:
基本数据类型 包装类
int Integer
char Character
double Double
float Float
byte Byte
short Short
long Long
boolean Boolean
2.2自动、手动封箱和装箱 手动封箱和开箱
int i=10; //手动封箱 Integer integer=Integer.valueOf(i); Integer integer1=new Integer(i); //手动开箱 int a=integer.intValue();

自动封箱和开箱
//自动封箱 Integer i=10; //自动开箱 int m=i;


三、List的常用方法 3.1list中的添加
List list=new ArrayList<>(); list.add(1); //尾插法list.add(1,12); //插入相应的位置List list1=new ArrayList(); list1.add(1); list1.add(2); list1.add(3); list1.add(4); list.addAll(list1); //将list1中的所有元素放入list中末尾

3.2list中的删除
List list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.remove(1); //对下标进行删除 System.out.println(list); //[1, 3, 4, 5]

3.3list中的获取和修改
List list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); System.out.println(list.get(2)); //3 System.out.println(list.set(1, 10)); //2

3.4list中的查找
List list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(2); list.add(1); System.out.println(list.contains(1)); //为1的值是否在list里面System.out.println(list.indexOf(1)); //查找当前数 0 System.out.println(list.lastIndexOf(1)); //从后向前 4

3.5list中的截取和清空
List list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(2); list.add(1); //对于部分数组的截取 List list1=list.subList(1,3); System.out.println(list1); //[2, 3]list.clear(); //对于数组的清空 System.out.println(list); //[]

3.6ArrayList和LinkedList的构造方法
//无参构造 List list=new ArrayList<>(); //指定初始容量 List list1=new ArrayList<>(5); //使用list1中的初始容量 List list2=new ArrayList<>(list1); //无参构造 List list3=new LinkedList<>();


四、杨辉三角的练习 力扣链接:杨辉三角。
什么是杨辉三角?
笔记|List的用法和使用
文章图片

像这种形式不断累加的就是杨辉三角。
接下来就是对于杨辉三角的代码实现:
import java.util.ArrayList; import java.util.List; public class practice03 { public static List> Replace(int num){ List> list=new ArrayList<>(); int[][] add=new int[num][num]; for(int i=0; i list1=new ArrayList<>(); for(int j=0; j<=i; j++){ if(j==0||j==i){ add[i][j]=1; }else { add[i][j]=add[i-1][j]+add[i-1][j-1]; } list1.add(add[i][j]); } list.add(list1); } return list; } public static void main(String[] args) { List> list=Replace(3); System.out.println(list); } }


    推荐阅读