J2EE集合框架List

news2024/11/26 7:29:58

目录

一.UML

①集合类图

②线下教育平台用例图

 二.List集合特点

①学集合框架就是了解容器的数据结构(增删改查)

②有序的 可重复的

三.遍历方式

① foreach

② iterator 迭代器

③ for

四.LinkedList

①对比ArrayList是数据结构

Linkedlist: 链表 特点:查询修改慢,增加删除快

Arraylist: 数组  特点:查询修改快,增加删除慢

②堆栈 队列

五.增长因子论证

六.集合框架ArrayList中的重复元素去重及其底层原理


一.UML

①集合类图

 

②线下教育平台用例图

 二.List集合特点

①学集合框架就是了解容器的数据结构(增删改查)

②有序的 可重复的

public class Demo1 {
    public static void main(String[] args) {
        //集合本身就是一个容器,容器的特点,就是对存储的元素进行增删改查
        List list = new ArrayList<>();
        //增加
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println("目前集合容器中的元素:"+list);
        //修改
        list.set(1, "y");
        System.out.println("容器元素修改后,目前容器中的元素:"+list);
        //删除
        list.remove(0);
        list.remove("a");
        System.out.println("容器元素删除后,目前集合容器中的元素:"+list);
        //查看
        System.out.println("获取第一个容器元素:"+list.get(0));
    
    }

 

三.遍历方式

① foreach

② iterator 迭代器

③ for


    public static void main(String[] args) {
        List list = new ArrayList<>();
        //增加
        list.add("a");
        list.add("b");
        list.add("c");

       ① foreach
        for (Object object : list) {
            System.out.println(object);
        }
        ② iterator 迭代器

        Iterator it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        ③ for

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

四.LinkedList

①对比ArrayList是数据结构

Linkedlist: 链表 特点:查询修改慢,增加删除快
Arraylist: 数组  特点:查询修改快,增加删除慢

 

②堆栈 队列

 

/**
 * 用linkedList完成一个堆栈容器
 * 1.考核linkedList的api方法
 * 2.考核堆栈/队列的数据结构特点
 * @author PC
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        LinkedList ll = new LinkedList<>();
        ll.add("a");
        ll.add("b");
        ll.add("c");
        DuiZhan dz = new DuiZhan(ll);
        //定义一个方法,当这个方法被调用的时候,后存进去的元素要先输出,先存进去的元素要后输出
        System.out.println(dz.pop());
        System.out.println(dz.pop());
        System.out.println(dz.pop());
    }

}

class DuiZhan{
    private LinkedList ll;

    public DuiZhan(LinkedList ll) {
        super();
        this.ll = ll;
    }
//压栈  弹栈    
    public Object pop() {
        return ll.removeLast();
    }
    
}

 

五.增长因子论证

/**
 * linkedList调优
 * 元素存储在集合的过程
 * ArrayList
 * 数组 长度不可变
 * 
 * 1.证明数据结构就是数组
 * 2.为什么数组长度不可变,集合List长度可变
 * 
 * 增长因子(一次性扩容多少) 0.5倍  扩容1.5倍  1+0.5
 * @author PC
 *
 */
public class Demo3 {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        ArrayList al = new ArrayList<>(50);
        for (int i = 0; i < 100; i++) {
            al.add(i);
            System.out.println(i+"\r");
            getCurrentArrLength(al);
        }
        
    }

    //获取ArrayList al对象底层数组的长度
    private static void getCurrentArrLength(ArrayList al) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Field f = al.getClass().getDeclaredField("elementData");
        f.setAccessible(true);
        Object[] Object = (java.lang.Object[]) f.get(al);
        System.out.println("当前集合底层数组的容器长度"+Object.length);
    }
        

六.集合框架ArrayList中的重复元素去重及其底层原理

/**
 * list底层对象去重原理    跟equals
 * @author PC
 *
 */
public class Demo4 {
    public static void main2(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        List list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println("目前集合容器中的"+list);
        //去重
        if(!list.contains("b")) {
            list.add("b");
        }
        System.out.println("目前集合容器中的"+list);
    }

    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        List list = new ArrayList<>();
        list.add(new Student(1,"zs"));
        list.add(new Student(2,"ls"));
        list.add(new Student(3,"lx"));
        System.out.println("目前集合容器中的"+list);
        //去重
        if(!list.contains(new Student(3,"lx"))) {
            list.add(new Student(3,"lx"));
        }
        System.out.println("目前集合容器中的"+list);
    }
}
class Student{
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public Student() {
        // TODO Auto-generated constructor stub
    }
    public Student(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
    
    @Override
    public boolean equals(Object obj) {
        System.out.println("被调了。。。");
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (id != other.id)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【回溯算法part01】| 理论基础、77.组合

&#x1f388;回溯算法理论基础 回溯算法的本质是穷举&#xff0c;并不是一个高效的算法&#xff0c;但是有的题必须要用回溯法&#xff0c;如&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合切割问题&#xff1a;一个字符串按一定规则有几种切割方式子集…

学习 | 药品GMP认证和药厂GMP认证是怎么回事?

可能本身从事药品生产经营的朋友会知道&#xff0c;药品的GMP认证是怎么一回事&#xff0c;但是对于一些想要进入药品生产行业的企业&#xff0c;例如化工产品想进入原料药生产、药用辅料生产&#xff0c;塑料等材料制作商进入药品包装材料生产&#xff0c;只是听这说听那说&am…

【STL】vector快速上手

目录 一&#xff0c;vector的模板特性 二&#xff0c;vector基本使用 1. 构造函数 2. operator 赋值 3. vector——增删 A, 尾插 && 尾删 B&#xff0c;insert C, erase 4. 访问vector 遍历vector中元素&#xff1a; 法一&#xff1a;数组[]法 || at法…

HashMap-JDK8源码讲解及常见面试题

数据结构 红黑树 在JDK8中&#xff0c;优化了HashMap的数据结构&#xff0c;引入了红黑树。即HashMap的数据结构&#xff1a;数组链表红黑树。HashMap变成了这样。 为什么要引入红黑树 1、主要是为了提高HashMap的性能&#xff0c;即解决发生hash冲突后&#xff0c;因为链…

一些总结-C++

1.spdlog 需要安装spdlog库&#xff0c;然后连接器增加-lspdlog 不需要复制头文件到目录&#xff0c;安装到机器上之后&#xff0c;从系统目录加载头文件即可。 部分用法&#xff1a; 2.redis 需要安装hiredis库&#xff0c;链接器-lhiredis 不需要复制头文件到目录&#…

Java Web HTTP 23.7.4

HTTP 1&#xff0c;Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 在我们日常的生活中&#xff0c;经常会使用浏览器去访问百度、京东等这些网站&#xff0c;这些网站统称为Web网站。如下就是通过浏…

Linux学习之i节点(inode)和数据块操作

touch testfile创建一个空文件testfile。 stat testfile可以看一下文件的inode信息。 ls -li testfile看一下testfile相关信息。 上图中922208是inode号码&#xff0c;也称为inode编号&#xff0c;若是使用ls -i testfile就可以直接看到inode号码。 du -h testfile可以看…

【Unity3D 问题总结】☀️ | 解决LayoutGroup配合Content Size Fitter使用时发生子成员位置错乱问题

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

Android、iOS快速全球化工具

动机 在进行移动端全球化的时候&#xff0c;我们需要根据语言类型准备格式相同&#xff0c;文本不同的好多个文件&#xff0c;如果一个一个翻译显然很浪费时间&#xff0c;如果整篇复制到Google翻译通常翻译出来的文本是没办法直接用的&#xff0c;所以我通过有道云API实现了一…

AIGC:【LLM(三)】——JARVIS:连接ChatGPT和HuggingFace解决AI问题

文章目录 0.摘要1.引言2.相关工作3.HuggingGPT3.1 任务规划3.2 模型选择3.3 任务执行3.4 响应生成 4.限制5.结论6.参考资料 0.摘要 解决具有不同领域和模态的复杂人工智能任务是通往人工通用智能的关键骤。尽管存在丰富的适用于不同领域和模态的人工智能模型&#xff0c;但它们…

Linux系统之iostat命令的基本使用

Linux系统之iostat命令的基本使用 一、iostat命令介绍二、iostat命令帮助1.1 iostat的帮助信息1.2 iostat的选项解释 三、iostat命令的基本使用3.1 查看iostat工具版本3.2 直接使用iostat命令3.3 间隔5秒查看3次信息3.4 只查看磁盘状态3.5 以k或M为单位显示信息 四、查看磁盘I/…

JMM 规范

JMM是Java Memory Model&#xff08;Java 内存模型&#xff09;的缩写&#xff0c;是Java虚拟机规范中定义的一套规则&#xff0c;用来规范Java程序在多线程环境下的内存访问方式。其主要作用是保证多线程之间的数据可见性、有序性和原子性。JMM规范定义了一些程序员和JVM实现者…

机器学习(ML)策略

目录 1、正交化的概念 2、单一数字评估指标&#xff08;Single number evaluation metric&#xff09; 3、训练/开发/测试集划分 4、迁移学习 5、多任务学习 6、端到端深度学习 1、正交化的概念 正交化是机器学习中一种常用的数据预处理技术&#xff0c;用于减少特征之间…

IMX6ull SPI 协议

一 SPI 简介 1.1 SPI SPI 全称是 Serial Perripheral Interface&#xff0c;也就是串行外围设备接口。 SPI 是 Motorola 公司推出的一种同步串行接口 技术&#xff0c;是一种高速、全双工的同步通信总线&#xff0c; SPI 时钟频率相比 I2C 要高很多&#xff0c;最高可以工作 …

【IT服务管理】MITRE :IT服务管理

定义&#xff1a; 信息技术 (IT) 服务管理 (ITSM) 是解决管理、支持和交付 IT 服务的最佳实践的框架、流程和模型的通用保护伞。IT 服务可能包括&#xff08;由 NIST 为云计算定义&#xff09;&#xff1a;软件即服务 (SaaS)、平台即服务 (PaaS) 和基础设施即服务 (IaaS)。 关键…

DevExpress WPF Scheduler组件,快速构建性能优异的调度管理器!(下)

在上文中&#xff08;点击这里回顾>>&#xff09;&#xff0c;我们介绍了DevExpress WPF Scheduler组件中的日历视图、时间轴视图等&#xff0c;在本文中我们将继续带大家了解Scheduler组件的UI/UX自定义等其他功能。 DevExpress WPF拥有120个控件和库&#xff0c;将帮助…

Spring Boot 61:JPA 中的级联类型

Spring Boot 61&#xff1a;JPA 中的级联类型 图源&#xff1a;简书 (jianshu.com) 关系型数据库的增删改查操作会因为有关联关系而存在“级联操作”的需要&#xff0c;体现在 JPA 中&#xff0c;就是实体中会定义的级联类型&#xff08;Cascade Type&#xff09;。 JPA 中的…

【二维属性+贪心+双指针】ABC 195 D

D - Shipping Center (atcoder.jp) 题意&#xff1a; 思路&#xff1a; 经典中的经典&#xff0c;二维属性&#xff0c;对于其中的一个关键字排序&#xff0c;然后双指针将合法的可行解放入容器中&#xff0c;再去容器中找最优解&#xff0c;用双指针是因为它具有单调性 这里…

18-Linux 常用命令

目录 1.ls PS&#xff1a;FinalShell设置背景和字体 2.pwd 3.cd PS&#xff1a;认识 Linux 目录结构——Linux 是一个树形目录结构 PS&#xff1a;绝对路径 vs 相对路径 PS&#xff1a;使用 tab 键补全 PS&#xff1a;使用 ctrl c 重新输入 4.touch PS&#xff1a;L…

基于梯度下降算法的无约束函数极值问题求解

基于梯度下降算法的无约束函数极值问题求解 1 知识预警1.1导数1.2偏导数1.3方向导数1.4梯度 2 梯度下降算法3 无约束函数极值问题求解3.1 算例13.1.1 Python编程求解3.1.2 求解结果与可视化 3.2 算例2 Rosenbrock函数3.2.1 Python编程求解3.2.2 求解结果与可视化 1 知识预警 1…