IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> List的用法和使用 -> 正文阅读

[数据结构与算法]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什么是包装类

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

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

基本数据类型包装类
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<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);
    }
}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 14:21:50  更:2021-09-27 14:22:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/2 20:08:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码