资讯专栏INFORMATION COLUMN

List的用法和使用

Blackjun / 1090人阅读

摘要:什么是泛型泛型有占位符,表示当前的类是一个泛型类这样我们就可以将这个类的其他部分用替换掉了,使用时就可以更加的方便。

目录

一、泛型

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为什么引入泛型

接下来我们就来看一段代码

 我们会发现当把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类型,自动对类型进行检测:

 可以自动对类型进行转换:

String s=myArrayList.get(0);

注意:泛型的泛型参数只能是类类型或者简单类型的包装类。

泛型的擦除机制:

当我们编写一个新的类时我们进行对比我们会发现

MyArrayList myArrayList=new MyArrayList<>();System.out.println(myArrayList);        Person person=new Person<>();System.out.println(person);

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


二、包装类的使用

2.1什么是包装类

包装类就是对基本数据结构进行包装,使它们拥有一定的方法更方便的满足使用。

基本数据类型和包装类的关系如下图所示:

基本数据类型包装类
intInteger
charCharacter
doubleDouble
floatFloat
byteByte
shortShort
longLong
booleanBoolean

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));//3System.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));//查找当前数 0System.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<>();

四、杨辉三角的练习

力扣链接:杨辉三角

什么是杨辉三角?

 像这种形式不断累加的就是杨辉三角。

接下来就是对于杨辉三角的代码实现:

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);    }}

 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121244.html

相关文章

  • 精读《React PowerPlug 源码》

    摘要:今天我们就来解读一下的源码。比较有意思,将定时器以方式提供出来,并且提供了方法。实现方式是,在组件内部维护一个定时器,实现了组件更新销毁时的计时器更新销毁操作,可以认为这种定时器的生命周期绑定了组件的生命周期,不用担心销毁和更新的问题。 1. 引言 React PowerPlug 是利用 render props 进行更好状态管理的工具库。 React 项目中,一般一个文件就是一个类,...

    teren 评论0 收藏0
  • Python 进阶之路 (五) map, filter, reduce, zip 一网打尽

    摘要:另外,这些中的每一个都是纯函数,有返回值。例如,如果要计算整数列表的累积乘,或者求和等等基础语法参数是连续作用于每一个元素的方法,新的参数为上一次执行的结果,为被过滤的可迭代序列返回值最终的返回结果在中,是一个内置函数。 简洁的内置函数 大家好,我又回来了,今天我想和大家分享的是Python非常重要的几个内置函数:map,filter,reduce, zip。它们都是处理序列的便捷函数...

    ccj659 评论0 收藏0
  • 快速理解JavaScript中apply()call()用法用途

    摘要:在学习之前,我们必须对的作用和使用方法有所了解,可以参考我前一篇文章快速理解中的用法与陷阱。和的作用十分相似,只是参数类型上的差别,以适应不同的使用场景。 在学习apply()之前,我们必须对this的作用和使用方法有所了解,可以参考我前一篇文章《快速理解JavaScript中this的用法与陷阱》。当然如果你已经熟悉this的相关知识,那么请直接往下看。 call()和apply()...

    chenjiang3 评论0 收藏0
  • Collections工具类概述以及用法

    摘要:正文工具类是包中的一个工具类,主要功能是对集合及其元素进行操作。这篇文章算是对官方文档的总结和归纳,也加以自己的思考,也是面试题之一,希望自己能在之后不会再吃这道题的亏。     本文首发于cartoon的博客    转载请注明出处:https://cartoonyu.github.io/c...    推荐一篇不错的博文https://gitee.com/SnailClimb/Jav...

    XGBCCC 评论0 收藏0
  • 老哥你真知道ArrayList#sublist正确用法

    摘要:我们有这么一个场景,给你一个列表,可以动态的新增,但是最终要求列表升序,要求长度小于,可以怎么做这个还不简单,几行代码就可以了测试验证上面的代码先不考虑性能的优化方面,有没有问题写了个简单的测试,我们来看下会出现什么情况启动参数修改 我们有这么一个场景,给你一个列表,可以动态的新增,但是最终要求列表升序,要求长度小于20,可以怎么做? 这个还不简单,几行代码就可以了 public Li...

    loonggg 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<