栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java学习—(17)泛型、集合框架、List接口的常用方法】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java学习—(17)泛型、集合框架、List接口的常用方法】

(点击跳转即可哦)

java学习专栏

LeetCode刷题专栏


文章目录
  • 泛型的应用
    • 泛型的引出
  • 集合框架初识
  • List

泛型的应用

定义泛型对象时,只能使用类

基本类型不能保存到泛型中,必须使用包装类

泛型的引出

看下面这个代码

class Point{
	x;
	y;
}

若x = 10, y = 20,

​ x = 10.1,y = 20.1

​ x = “你”,y= “我”,在Java中,Java是一个强类型语言,在定义x,y时,必须强制定义变量类型,那此时x,y 该定义为什么类型呢?

应该定义为泛型


泛型,在编译阶段检查类型是否一致的手段。

所谓的泛型指的是在类定义时不明确类型,在使用时明确类型

定义泛型使用"<>"操作符

称为类型参数,

<>中间可以使用任何字符,规范是单个的大写字母

T : 表示任意类型

K : 键值对,key值

V : value 值

E :单个元素

public class Point(){
    //x,y这两个成员变量的类型不定,在产生Point对象时,明确x,y的类型
    T x;
    T Y;
    public static void main(String[] args){
        //此时设置的类型为字符串
        Point point = new Point<>();
        point.x = "张三";
        point.y = "李四";
        System.out.println(point.x);
        System.out.println(point.y);
    }
}

当定义为Point,此时将T这个类型参数替换为明确的类型String,若在后面的输入时,数据类型不是String类型,就会发生编译报错,不用等到运行就能够看到错误。

一般来说,我们要求把所以的错误都提前暴露在编译阶段,程序还没有跑起来就能够发生错误。

我们发现,引入泛型后,可以在编译阶段检查设置的类型值是否 是指定类型,若不一致,编译报错,取出值的时候,就无需再进行强转。


若泛型类中存在多个类型参数,成员变量的类型不一定一致。

//使用不同的大写字母来指代不同类型
public class Point{
	T x;
    E y;
    public static void main(String[] args){
        Point p1 = new Point<>();
        x = "张三";
        y = "李四";
        Point p2 = new Point<>();
        x = "年龄";
        y = 18;
    }
}

此时是不会报错的。

在产生对象时,T和E的类型可以相同,也可以不同。


集合框架初识

所谓的集合就是用来保存和操作数据的一些类。

Collection :线性表集合,保存单个同类型的元素

List : 线性结构

Queue : 队列

Deque : 双端队列

Map: 键值对集合

以上都是接口

ArrayList(动态数组) 和 LinkedList (双向链表)是 List的具体实现子类


List

List - 线性表的父接口

常用子类: —ArrayList(底层是一个动态数组实现的线性表)

​ — LinkedList(底层是一个双向链表实现的线性表)

List list = new LinkedList<>();
List list = new ArrayList<>();

List 接口中定义的方法,子类在实现时,都需要进行覆写,使用时更换子类非常简单,只需要更换new 的子类对象,在使用时没有任何区别,使用方法都是在接口中定义好的。


List定义的方法,

//尾插 e
boolean add(E e) 
    
//将 e 插入到 index 位置
void add(int index, E element) 
    
//尾插 c 中的元素
//boolean addAll(Collection< ? extends E> c) 
    
//删除 index 位置元素
E remove(int index)
    
//删除遇到的第一个 o
boolean remove(Object o) 
    
//获取下标 index 位置元素
E get(int index) 
    
//将下标 index 位置元素设置为 element
E set(int index, E element) 

//清空
void clear() 

//判断 o 是否在线性表中
boolean contains(Object o) 

//返回第一个 o 所在下标
int indexOf(Object o)

//返回最后一个 o 的下标
int lastIndexOf(Object o) 

//截取部分 list
List subList(int fromIndex, int toIndex) 

二维数组

//二维数组 int[][] arr = new int[][];
List> list = new ArrayList<>();
List l1 = new ArrayList<>();
l1.add(1);
l1.add(2);
l1.add(3);
List l2 = new ArrayList<>();
l2.add(4);
l2.add(5);
l2.add(6);
list.add(l1);
list.add(l2);
System.out.println(list);

输出结果:

[[1,2,3],[4,5,6]]

要是对大家有所帮助的话,请帮我点个赞吧。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/885945.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号