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为什么引入泛型
接下来我们就来看一段代码
我们会发现当把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的用法和使用相关推荐
- nn.moduleList 和Sequential由来、用法和实例 —— 写网络模型
对于cnn前馈神经网络如果前馈一次写一个forward函数会有些麻烦,在此就有两种简化方式,ModuleList和Sequential.其中Sequential是一个特殊的module,它包含几个子M ...
- JS中的call()方法和apply()方法用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
- MATLAB判断三角形成立的编程,Triangulation 划分三角形网络时用到的大量算法和测试例程 matlab 259万源代码下载- www.pudn.com...
文件名称: Triangulation下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 213 KB 上传时间: 2016-05-24 下载次数: 0 详细说 ...
- ADPRL - 近似动态规划和强化学习 - Note 10 - 蒙特卡洛法和时序差分学习及其实例 (Monte Carlo and Temporal Difference)
Note 10 蒙特卡洛法和时序差分学习 Monte Carlo and Temporal Difference 蒙特卡洛法和时序差分学习 Note 10 蒙特卡洛法和时序差分学习 Monte Car ...
- C语言的双向链表头插法和尾插法,指定节点删除
文章目录 前言 头插法 尾插法 删除节点 测试代码如下 前言 双向链表和单链表的唯一区别就是多个一个指针域而已,该指针域可以访问链表的上一个节点. 关于构造双向链表的过程我们常见的有两种方法,和单链表 ...
- scanf()函数的用法和实践
scanf()函数的用法和实践 摘要: 本文阐述了基于ANSI,Win 95,Win NT上的 C/C++语言中scanf()函数的用法,以及在实际使用中常见错误及对策. 关键词: scanf() 一 ...
- 线性回归介绍及分别使用最小二乘法和梯度下降法对线性回归C++实现
回归:在这类任务中,计算机程序需要对给定输入预测数值.为了解决这个任务,学习算法需要输出函数f:Rn→R.除了返回结果的形式不一样外,这类问题和分类问题是很像的.这类任务的一个示例是预测投保人的索赔金 ...
- 接口设计文档_app端接口用例设计方法和测试方法(一)
前言 接口测试作为测试的重要一环,重点关注的是数据层面的输入输出,今天小编介绍一种常用的接口测试用例设计方法和测试方法,希望对大家有所帮助,由于内容较多,分三次给大家讲解,今天先介绍"请求层 ...
- 「Java基本功」一文读懂Java内部类的用法和原理
内部类初探 一.什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能 ...
- Eclipse用法和技巧十:显示代码outline
在一个文件中快速找到某一个方法或者某一个作用域,可以使用 Ctrl+O或者Ctrl+F3,快速显示当前代码的outline,进行快速查找.效果如下: 这里主要是补充一些后续操作,能更加方 ...
最新文章
- android源码framework下添加新资源的方法
- PHP7中php.ini、php-fpm和www.conf的配置
- Android Jetpack组件之数据库Room详解(三)
- react招聘项目——使用cookie实现项目自动登录功能
- 解决Genymotion下载设备失败的方法(Connection Timeout)
- Silverlight 布局控件
- windows server 2008R2 部署WSUS 服务
- 软件测试的学习之路-----基本的 HTML
- LeetCode(40):组合总和 II
- 7.6 C程序的存储空间布局
- [转载] python中import问题
- NX_UG1872安装
- 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
- greenplum小版本升级
- C语言猜数字游戏及关机程序
- sass混合器,选择器的继承
- openwrt luci固件升级流程
- 2015年南通二级建造师考试报名通知
- 应急照明和疏散指示系统在化工厂房中的设计与产品选型
- 网络流-割的概念以及定理
热门文章
- pycharm 输入中文变成繁体字的解决方法
- 数据结构-马走日的解法
- 股票配资公司该怎么选择呢?
- 中国白帽黑客群像:90后占60%以上
- 浏览器占满整个屏幕_如何实现div布满整个浏览器,全屏
- 用python编写一个检测两段文本相似度程序
- python办公自动化代码_[Python] 自动化办公 邮件操作基础知识及代码(下)
- 3DRPG1-3 基础认识
- php 无法上传附件,Phpwind上传附件“插入”按钮失效无法批量上传解决方法
- 欢聚时代(YY)2018笔试总结(数据挖掘方向)