学习记录--泛型与集合框架

C#学习记录 C#初级学习教程前言一、计算机语言二、Helloworld三、.NET概述总结 C#初级学习教程前言一、计算机语言二、Helloworld三、.NET概述总结 前言 主要是近期学习C#的记录,主要是一些基础语法 提示:以下是本篇文章正文内容,下面案例可供参考 一、计算机语言 1.计算机语言(编程语言)(程序设计语言) 人类交流(自然语言) 计算机语言的发展 机器语言——01010101二进制语言 汇编语言——add,mov等符号语言 高级语言——+,- 等 经过编译最终会编译成机器语言,机器最终才能读懂 阅读详情

学习记录:泛型与集合框架

一 泛型
泛型是JDK1.5后推出,目的是建立具有安全类型的集合框架,如散列映射,链表等数据结构

1.1 泛型类的声明

语法:class 名称<泛型列表>
该语法可声明一个类,叫泛型类
泛型类声明的时候,泛型列表给出的泛型可以作为类的成员变量的类型,方法的类型以及局部变量的类型

public class Cone<E> {
    double height;
    E bottom;
    public Cone(E b){
        bottom=b;
    }
}

1.2 使用泛型类声明对象
和普通的类相比,泛型类声明和创建对象时,类名后多了一对"<>",而且必须用具体的类型替换”<>“

Cone<Circle> coneOne;
coneOne=new Cone<Circle>(new Circle());

例1

Cone.java
package second;

public class Cone<E> {
    double height;
    E bottom;

    public Cone(E b) {
        bottom = b;
    }

    public void setHeight(double h){
        height=h;
    }

    public double computerVolume() {
        String s = bottom.toString();
        //泛型变量只能调用从Object 类继承或重写的方法
        Double area = Double.parseDouble(s);
        return 1.0 / 3.0 * area * height;
    }
}


Rect.java

package second;

public class Rect {
    double sideA,sideB,area;
    Rect(double a,double b){
        sideA=a;
        sideB=b;
    }
    public String toString(){
        area=sideA*sideB;
        return area+"";
    }
}

Circle.java

package second;

public class Circle {
    double area,radius;
    Circle(double r){
        radius=r;
    }

    public String toString(){
        area=radius*radius*Math.PI;
        return area+"";
    }

}

测试主类

package second;

public class Example15_1 {
    public static void main(String[] args) {
        Circle circle = new Circle(10);
        Cone<Circle> coneOne = new Cone<>(circle);

        coneOne.setHeight(10);
        System.out.println(coneOne.computerVolume());
        Rect rect = new Rect(15,23);
        Cone<Rect> rectCone = new Cone<>(rect);
        rectCone.setHeight(98);
        System.out.println(rectCone.computerVolume());
    }
}

java泛型的目的:
1)建立具有类型安全的数据结构
2)使用泛型类建立的数据结构时,不必进行强制类型转换

二 链表
需要动态的减少或增加数据项时可以使用链表
链表是由若干结点的对象组成的一种数据结构,每个结点含有一个数据和下一个结点的引用(单链表),或含有一个数据并含有上一个结点的引用和下一个结点的引用(双链表)

在这里插入图片描述

2.1 LinkedList 泛性类
java.util包LinkedList 泛型类创建的对象已链表存储数据,创建的对象成为链表对象

LinkedList<String> mylist=new LinkedList<String>();
//声明链表的时候要指明E的具体类型 

链表mylist使用add方法添加结点

mylist.add("how");
mylist.add("are");

结点自动连接,不需要操作安排结点中所存放的下一个或上一个结点的引用

2.2 常用的方法
LinkedList 实现泛型接口List的泛型类,而泛型接口List又是Collection泛型接口的子接口

接口回调:LinkedList 对象的引用赋值给Collection对象的引用赋值给Collection接口变量或List接口变量,接口就可以调用类实现的接口方法

LinkedList 的绝大部分方法都是泛型接口方法的是实现
常用的方法:
public boolean add 链表末尾添加一个结点
public void add(int index,E element) 链表的指定位置添加一个新的结点
public void clear() 删除链表的所有结点
public E remove(int index)删除指定位置上的结点
public boolean remove(E element) 删除首次出现含有的element的结点
public E get(int index) 得到链表中指定位置上的结点
public int indexOf(E element) 返回element结点首次出现的位置,无此结点则返回-1
public int lastIndexOf(E element) 返回element结点最后出现的位置,无此结点返回-1
public E set(int index,E element) 链表中index位置的数据替换为element ,并返回被替换的数据
public int size() 链表长度(结点个数)
public boolean contains(Object element) 判断链表中是否有结点含有数据element

LinkedList 泛型类本省新增加的常用方法
public void addFirst(E element) 链表的头添加新结点,结点的数据是element指定的数据
public void addLast(E element)链表的末尾添加新结点,结点的数据是element指定的数据
public E getFirst() 得到链表的第一个结点中的数据
public E getLast()得到链表的最后一个结点中的数据
public E removeFirst() 删除第一个结点,并返回该结点中的数据
public E removeLast() 删除最后一个结点,并返回该结点中的数据
public Object clone()得到当前列表的一个克隆列表克隆链表中的结点数据的改变不会影响到原来的链表,反之亦然

2.3 遍历链表
java集合框架为各种数据结构的集合人,如链表,散列表等都提供了迭代器
LinkedList不是顺序存储结构,so 链表调用get(int index) 方法的速度比顺序存储结构的集合调用get(int index)方法的速度慢

I think:顺序存储结构遍历查找速度快,链表适合增删等

链表对象可使用iterator()方法获取一个iterator对象,该对象就是针对当前链表的迭代器

package second;
public class Example15_2 {
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<>();
        //添加数据
        for(int i=0;i<60096;i++){
            linkedList.add(i+"");
        }

        //遍历
        Iterator<String> iterator = linkedList.iterator();
        long starttime=System.currentTimeMillis();
        while (iterator.hasNext()){
            String te=iterator.next();
        }

        long endtime=System.currentTimeMillis();

        long result=endtime-starttime;
        System.out.println("使用迭代器遍历花费的时间"+result);
        starttime=System.currentTimeMillis();
        for (int i=0;i<linkedList.size();i++){
            String te=linkedList.get(i);
        }
        endtime=System.currentTimeMillis();
        result=endtime-starttime;
        System.out.println("使用get方法遍历集合所画的时间"+result+"毫秒");
    }
}

2.4 排序与查找
Collections类提供排序与查找的方法
public static sort(List list) 将list中的元素排序
int binarySearch(List list,T key,CompareTo c)使用折半查找list是否含有和参数key相等的元素,如果key与链表中某个元素相等,方法返回和key相等的元素在链表中索引位置(链表的索引位置从0开始)否则返回-1

String 类实现Comparable接口,规定字符串按字典序排序,如果链表中的对象不是字符串,那么创建对象的类必须实现Comparable接口,在int compareTo(Object b)来规定对象的大小关系
案列
Student.java

package second;

public class Student implements Comparable {
    int height=0;
    String name;
    Student(String n,int h){
        name=n;
        height=h;
    }
    @Override
    public int compareTo(Object o) {
       Student st= (Student)o;
       return (this.height-st.height);
    }
}

测试的main

package second;

import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;

public class Example15_4 {
    public static void main(String[] args) {
        LinkedList<Student> students = new LinkedList<>();
        students.add(new Student("颤三", 188));
        students.add(new Student("李三", 178));
        students.add(new Student("周三", 198));
        Iterator<Student> iterator = students.iterator();

        System.out.println("排序前链表中的数据");
        while (iterator.hasNext()) {
            Student s = iterator.next();
            System.out.println(s.name + ":" + s.height);
        }

        //进行排序
        Collections.sort(students);
        System.out.println("排序后的数");
        iterator = students.iterator();
        while (iterator.hasNext()) {
            Student s = iterator.next();
            System.out.println(s.name + ":" + s.height);
        }

        Student jack = new Student("jack0", 178);
        int index = Collections.binarySearch(students, jack, null);
        System.out.println(index+"index");
        if (index > 0) {
            System.out.println(jack.name + "和链表中" + students.get(index).name + "身高一样");
        }
    }
}

2.5 洗牌与翻转
Collections类还提供将链表中的数据重新随机排序的类方法以及旋转链表中数据的类方法
public static void shuffle(List list) 将list中的数据重新随机排列
public void rotate(List list,int distance) 旋转链表中的数据
distance>0 向右转动
distance<0 向做转动
public static void reverse(List list) 翻转数据

Csharp进阶:泛型集合 List泛型集合,Dictionary泛型集合,HashSet泛型集合 阅读详情

相关推荐

C#学习记录——数据结构(一)集合结构中的两种泛型集合

C#学习记录——数据结构 第一章 C#数据结构中集合结构中的两种泛型集合 文章目录C#学习记录——数据结构前言一、泛型集合(一)集合概述(二)数组基本使用步骤二、List和Dictionary 前言 数据结构是相互之间存在一种或多种特殊关系的数据元素的集合,如int、float等,本文主要介绍List和Dictionary<TKey, TValue>两个泛型集合。 一、泛型集合 (一)集合概述 集合:可以任意存储对象,并且长度是可变的类。 C#中集合结构有两种:泛型集合和非泛型集合。泛型集

weixin_42764899的博客 1003

collection、iterator迭代器(接口)、泛型、数据结构、list接口、set接口、可变参数、collections工具类、Map接口、of方法优化

1.collection接口 java.util.collection接口 所有单列集合的最顶层接扣,里面定义了所有单列集合共性的方法 任意的单列集合都可以使用collection接口中的方法 1.概念 数组可以存放基本类型,也可以存放对象 集合只能存储对象 如:Arraylist 数组的长度不可变,集合的长度可以随意增加减少 2.集合的框架 单列集合的体系框架 collection集...

weixin_40120708的博客 417

Java基础笔记之集合框架和泛型

详细的介绍了集合框架的用法,及其语法规则,剖析了使用的使用注意事项,帮助更牢靠的掌握集合框架的知识及泛型内容。谢谢

集合框架和泛型

集合与泛型

qq_57683680的博客 945

Java集合框架及泛型

集合框架及泛型的介绍和基础理解,方便大家了解集合框架及泛型。

泛型与集合框架

java数据结构,泛型与集合框架,有各种集合运算的算法,Collection接口介绍,数组方法介绍等

集合框架和泛型(详解)

集合框架和泛型(详解)

没有简介 843

AD9176 双通道高速DAC调试记录

AD9176是一款高性能双通道16位数模转换器,支持高达12.6GSPS采样率,专为多频段无线应用设计。该器件集成8通道15.4Gbps JESD204B接口,支持复数/实数数据输入,每通道最大输入速率达3.08GSPS。关键特性包括:48位高精度NCO、灵活的插值滤波器(最高12倍)、优异的动态性能(SFDR达-83dBc@1.84GHz)以及多芯片同步功能。硬件调试需重点关注时钟配置(建议250M基准时钟)、JESD参数匹配及交流耦合设计。测试指标要求SFDR>55dBc@312MHz,实测值可达65d

universaldata的博客 1489

java高级开发 第十三章——泛型与集合框架

E是其中的泛型,代表一种数据类型,可以是类或接口,不能是基本数据类型。泛型可以作为类的成员变量的类型,方法的类型,局部变量的类型。带有泛型的类称为泛型类。(1)用具体的类型代替E(2)使用通配符?Cone<?//Geometry类或Geometry的子类或实现了Geometry接口的类Cone<?//B类或者B的任何父类Cone<?通过类实现这个接口时可以指定泛型的具体类型,也可以不指定。

NLxxxxX的博客 1161

Wireshark 4.6 TCP 流图解析:3种拥塞控制算法可视化对比

本文深入解析Wireshark 4.6的TCP流图功能,通过可视化对比Reno、Cubic和BBR三种主流拥塞控制算法的性能特征。文章提供详细的实验环境搭建方法、流图分析工具使用技巧,以及算法调优建议,帮助网络工程师优化TCP性能。

weixin_29291573的博客 444

基于ESP32-S3与模块化设计的立创桌面充电站:从硬件架构到Web控制实战

本文详细介绍了基于ESP32-S3与模块化设计的立创桌面充电站项目,涵盖从硬件架构到Web控制的全流程实战。项目采用模块化设计,支持自由组合快充模块,并通过ESP32-S3实现智能监控,用户可通过本地网页实时查看各接口电压、电流与功率数据。文章重点解析了基板、连接板与充电模块三大核心部件的设计,特别是大电流PCB的“开窗贴铜”处理技巧,并提供了固件刷写与Web控制面板的配置指南。

weixin_36122351的博客 292

学习日记-day20-6.1

泛型1.泛型:<>2.作用:统一数据类型,防止将来的数据转换异常3.注意:a.泛型中的类型必须是引用类型b.如果泛型不写,默认类型为Object## 1.为什么要使用泛型1.从使用层面上来说:统一数据类型,防止将来的数据类型转换异常2.从定义层面上来看:定义带泛型的类,方法等,将来使用的时候给泛型确定什么类型,泛型就会变成什么类型,凡是涉及到泛型的都会变成确定的类型,代码更灵活//获取元素中为String类型的字符串长度## 2.泛型的定义。

qq_59714927的博客 1472

4090显卡实测:PointPillars在KITTI数据集上的3D目标检测复现全流程(附避坑指南)

本文详细记录了在NVIDIA RTX 4090显卡上,从环境搭建、数据处理到模型训练与评估,完整复现PointPillars算法在KITTI数据集上进行3D目标检测的全流程。重点分享了版本配置、数据预处理、性能调优及常见问题的避坑指南,帮助开发者高效利用硬件资源,成功跑通并理解这一经典3D检测项目。

purple的博客 914

Ilist ibatis 整理

3262912 一些常见的C#代码收集站点(牛) - Adi_liu的专栏 - 优快云博客 2010-7-15 13:39:18 修改 3262696 ASP.NET中实现二级或多级域名(修改UrlRewrite) - jxufewbt的专栏 - 优快云博客 2010-7-15 11:15:19 修改 3262...

Bc1992的博客 166

华为OD机试真题 新系统2026-04-01 C++ 实现【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 1147

YOLOv8-Pose 姿态识别 RK3588 实战:从模型训练到 RKNN 部署,精度与推理速度双提升

本教程从YOLOv8-pose模型的姿态识别训练,到RK3588的边缘量化部署,为你打造了一套“高精度+高实时性+低成本”的人体姿态分析解决方案。无论是健身动作纠正、智能安防行为检测,还是工业人员姿态监控,这套技术都能直接复用——你只需替换数据集与业务逻辑,即可快速落地专属的边缘AI姿态识别系统。如果你在实践中遇到任何卡点,欢迎随时交流。记住,人体姿态识别的价值在于“关键点准、推理快、部署易”,而这三者的平衡,正是你通过本教程能掌握的核心能力。

FJN110的博客 362

20165324 2017-2018-2 《Java程序设计》课程总结

20165324 2017-2018-2 《Java程序设计》课程总结 每周作业链接汇总 预备作业1:20165324 我期望的师生关系 预备作业2:20165324 学习基础与C语言学习心得 预备作业3:20165324 预备作业三 第一周作业:20165324《Java程序设计》第一周 第二周作业:20165324《Java程序设计》第二周 第三周作业:20165324《Java程序设计》第...

weixin_34071713的博客 95

PPF函数可视化生产可能性边界线(R语言)

假设产品A的生产函数为A = 2 * R1 + R2,产品B的生产函数为B = R1 + 2 * R2,其中A和B分别表示产品A和产品B的产量,R1和R2表示资源1和资源2的分配数量。首先,让我们定义两种产品:产品A和产品B,它们的生产分别需要不同的资源和技术。现在我们已经计算了每种分配比例下的产品A和产品B的产量,接下来我们可以绘制生产可能性边界线。运行完整的代码后,我们将得到一个图形,显示了生产可能性边界线,该线代表经济体在给定资源和技术条件下所能生产的所有产品组合。

2301_79326559的博客 874

011_异常、泛型和集合框架

笔记

douyawen的博客 1310

C++ (week6、7):Linux系统编程4:网络

Linux网络:计算机网络概述、TCP协议、Socket编程、IO多路复用机制(select、epoll)、HTTP协议、进程池、线程池、大文件网络传输问题

Edward2022的博客 1429

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java集合框架和泛型机制

1、 2、泛型 应用背景:存入容器的对象在取出时需要强制转换类型,因为对象加入容器时都被转化为Object类型,而取出时又要转成实际类型。 在Java中向下类型转换时容易出现ClassCastException的异常,这时应当尽量避免。有什么办法可以让装入容器中的数据保存自己的类型而不被转化为Object对象呢,这就需要用到JDK5.0支持的新功能——Java的泛型。 定义:泛型只

liumei90 4867

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

尚硅谷2019版Java集合和泛型

观看b站尚硅谷2019版Java视频所做笔记

weixin_73617818的博客 878

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA基础(集合进阶) —— 泛型

泛型、泛型类、泛型方法、泛型接口以及 泛型的继承和通配符

hdakj22的博客 1262

08 集合、泛型

Collections 工具类介绍(1)Collections 是一个操作 Set、List 和 Map 等集合的工具类(2)Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作排序操作:(均为 static 方法)(1)reverse(List):反转 List 中元素的顺序(2)shuffle(List):对 List 集合元素进行随机排序(3)sort(List):根据元素的自然顺序对指定 List 集合元素按升序排序。

weixin_62504976的博客 1039

理解泛型,解决泛型擦除所带来的各类问题

在学习泛型的时候,我们是否会有这样的疑惑? 1.java是怎么实现泛型擦除的呢? 2.java是怎么进行自动类型转换的呢? 3.为什么泛型不支持基本类型int,string? 4.为什么不可以 T t=new T()? 5.既然会擦除(T)为(Object),那这样的强转还有什么意义? 6.为什么不能给静态泛型 public static T t;为什么不行 。。。 当真正理解泛型,这些问题自然不再是问题。这篇文章我们就会一一为大家解惑。

qwecnsu的博客 3162
下一篇: 学习记录-consul
GoGoGo19
博客等级 码龄9年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值