目录

一、泛型

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什么是泛型

泛型有<K>、<T>、<V>、<E>

占位符,表示当前的类是一个泛型类

class MyArrayList<T>{}

这样我们就可以将这个类的其他部分用<T>替换掉了,使用时就可以更加的方便。

class MyArrayList<T>{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<Object>不是Array<Integer>的父类,但是Object是Integer的父类。

1.3泛型类的使用

定义的里面的类容只能是String类型,自动对类型进行检测:

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

String s=myArrayList.get(0);

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

泛型的擦除机制:

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

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

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

二、包装类的使用

2.1什么是包装类

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

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

基本数据类型 包装类
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<Integer> list=new ArrayList<>();
list.add(1);//尾插法list.add(1,12);//插入相应的位置List<Integer> list1=new ArrayList<Integer>();
list1.add(1);list1.add(2);list1.add(3);list1.add(4);
list.addAll(list1);//将list1中的所有元素放入list中末尾

3.2list中的删除

List<Integer> 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<Integer> 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<Integer> 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<Integer> list=new ArrayList<>();
list.add(1);list.add(2);list.add(3);list.add(2);list.add(1);
//对于部分数组的截取
List<Integer> list1=list.subList(1,3);
System.out.println(list1);//[2, 3]list.clear();//对于数组的清空
System.out.println(list);//[]

3.6ArrayList和LinkedList的构造方法

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

四、杨辉三角的练习

力扣链接:杨辉三角。

什么是杨辉三角?

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

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

import java.util.ArrayList;
import java.util.List;public class practice03 {public static List<List<Integer>> Replace(int num){List<List<Integer>> list=new ArrayList<>();int[][] add=new int[num][num];for(int i=0;i<num;i++){List<Integer> 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<Integer>> list=Replace(3);System.out.println(list);}
}

List的用法和使用相关推荐

  1. nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型

    对于cnn前馈神经网络如果前馈一次写一个forward函数会有些麻烦,在此就有两种简化方式,ModuleList和Sequential.其中Sequential是一个特殊的module,它包含几个子M ...

  2. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  3. MATLAB判断三角形成立的编程,Triangulation 划分三角形网络时用到的大量算法和测试例程 matlab 259万源代码下载- www.pudn.com...

    文件名称: Triangulation下载  收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 213 KB 上传时间: 2016-05-24 下载次数: 0 详细说 ...

  4. ADPRL - 近似动态规划和强化学习 - Note 10 - 蒙特卡洛法和时序差分学习及其实例 (Monte Carlo and Temporal Difference)

    Note 10 蒙特卡洛法和时序差分学习 Monte Carlo and Temporal Difference 蒙特卡洛法和时序差分学习 Note 10 蒙特卡洛法和时序差分学习 Monte Car ...

  5. C语言的双向链表头插法和尾插法,指定节点删除

    文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...

  6. scanf()函数的用法和实践

    scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...

  7. 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现

    回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...

  8. 接口设计文档_app端接口用例设计方法和测试方法(一)

    前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...

  9. 「Java基本功」一文读懂Java内部类的用法和原理

    内部类初探 一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能 ...

  10. Eclipse用法和技巧十:显示代码outline

    在一个文件中快速找到某一个方法或者某一个作用域,可以使用 Ctrl+O或者Ctrl+F3,快速显示当前代码的outline,进行快速查找.效果如下:        这里主要是补充一些后续操作,能更加方 ...

最新文章

  1. android源码framework下添加新资源的方法
  2. PHP7中php.ini、php-fpm和www.conf的配置
  3. Android Jetpack组件之数据库Room详解(三)
  4. react招聘项目——使用cookie实现项目自动登录功能
  5. 解决Genymotion下载设备失败的方法(Connection Timeout)
  6. Silverlight 布局控件
  7. windows server 2008R2 部署WSUS 服务
  8. 软件测试的学习之路-----基本的 HTML
  9. LeetCode(40):组合总和 II
  10. 7.6 C程序的存储空间布局
  11. [转载] python中import问题
  12. NX_UG1872安装
  13. 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
  14. greenplum小版本升级
  15. C语言猜数字游戏及关机程序
  16. sass混合器,选择器的继承
  17. openwrt luci固件升级流程
  18. 2015年南通二级建造师考试报名通知
  19. 应急照明和疏散指示系统在化工厂房中的设计与产品选型
  20. 网络流-割的概念以及定理

热门文章

  1. pycharm 输入中文变成繁体字的解决方法
  2. 数据结构-马走日的解法
  3. 股票配资公司该怎么选择呢?
  4. 中国白帽黑客群像:90后占60%以上
  5. 浏览器占满整个屏幕_如何实现div布满整个浏览器,全屏
  6. 用python编写一个检测两段文本相似度程序
  7. python办公自动化代码_[Python] 自动化办公 邮件操作基础知识及代码(下)
  8. 3DRPG1-3 基础认识
  9. php 无法上传附件,Phpwind上传附件“插入”按钮失效无法批量上传解决方法
  10. 欢聚时代(YY)2018笔试总结(数据挖掘方向)