Java集合框架-Collection01-堆栈

简介: Java集合框架-Collection01-堆栈

一:堆栈


1、堆栈结构有先进后出的特点,就像弹夹一样,先进去的在后进去的低下。


2.在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。

使用的方法是:调用addFirst(E e) 方法和getFirst() 方法

注意不要调用add方法,否则将无法满足堆栈先进后出的特点

package com.zking.Collection.util;
import java.util.LinkedList;
public class MyStack {
    //以枪中的子弹为例
    //弹夹
    private LinkedList<Object> ls=new LinkedList<>();
    //装弹
    public void push(Object object) {
        ls.addFirst(object);//每次都把子弹增加到第一弹,把原来的压到下面去
    }
    //打枪
    public Object pop() {
        Object object=ls.getFirst();//取出第一弹
        ls.removeFirst();
        return object;
    }
    public int size() {
        return ls.size();
    }
    public static void main(String[] args) {//如果子弹的数目不等于1则一直循环下去
        MyStack ms=new MyStack();
        ms.push("a");
        ms.push("b");
        ms.push("c");
        ms.push("m");
        while(ms.size()!=0) {
         System.out.println(ms.pop());
        }
    }
}


二:接口


1.Collection接口

 1 集合框架的顶级接口

 2 是Set和List的父接口

 3 但不是Map的父接口

(如图所示)

 集合中只能添加引用类型数据

2. List接口

2.1 特点:有序、对象可以重复


2.2 遍历方式

   2.2.1 下标

   2.2.2 foreach(>=jdk1.5)

   2.2.3 迭代器Iterator(原理)


2.3 List优化

     初始容量10,负载因子1.5


     指定初始容量


2.4 List元素删除


public class Demo1 {
    /**
     * List优化
package com.zking.Collection.util;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class Demo {
    public static void main(String[] args) {
        //1.UML:统一建模语言,例如:类图,用例图等等
        //2.Collection接口:是集合框架的顶级接口,是list和set的父级接口,但不是Mep集合的父级接口
        //3.list特点:不唯一、有序
        //1)不唯一:不是唯一、可以添加重复元素
        //2)有序:元素添加顺序与输出顺序一致
        List lst=new ArrayList();
        lst.add("hh");
        lst.add("dd");
        lst.add("yy");
        lst.add("mm");
        //jbk1.8新特性
        lst.forEach(System.out::println);
        //4.list遍历方式(3种)
        //1)for下标
        /*System.out.println("-------1)for下标-------");
        for (int i = 0; i < lst.size(); i++) {
            System.out.println(lst.get(i));
        }
        //2)foreach
        System.out.println("-------2)foreach-------");
        for (Object object : lst) {
            System.out.println(object);
        }
        //3)iterator(迭代器)
        //获取迭代器
        Iterator it=lst.iterator();
        //hasNext():判断集合中的下一个元素是否存在,不移动下标
        //next():移动下标并取出当前元素
        //循环遍历
        while(it.hasNext()) {
            System.out.println(it.next());
        }*/
        //5.List删除方式(3种+1)
        //1)for正向删除
        //2)for逆向删除
        //3)iterator(推荐)
        //4)clear 清空
        System.out.println("删除之前的List集合大小:"+lst.size());
        //第一次删除:i=0 lst.remove(0) a
        //第二次删除:i=1 lst.remove(1) c
        //第三次删除:i=2 2<2
        /*int len=lst.size();
        for (int i = 0; i <len ; i++) {
            lst.remove(0);
        }*/
        /*int len=lst.size()-1;
        for (int i = len; i >= 0; i--) {
            lst.remove(i);
        }*/
        ListIterator it=lst.listIterator();
        while(it.hasNext()) {
            //先移动下标在删除元素
            it.next();
            it.remove();
        }
        System.out.println("删除之前的List集合大小:"+lst.size());
    }
}

3. 泛型

  JDK1.5之后

  以类型作为参数的类就叫泛型

  作用:提高程序健壮性,简化代码

  泛型的默认值是Object

package com.zking.Collection.util;
import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
     * 核心概念:
     * 1)初始化容量:10
     * 2)负载因子(扩容比例):1.5
     * 3)计算公式:当前容器大小*负载因子
     * 第一次:10*1.5(以此类推)
     * @param args
     */
    public static void main(String[] args) {
        List lst=new ArrayList(90);
        for (int i = 0; i < 90; i++) {
            lst.add(i);
            System.out.println(i);
            getLen(lst);
        }
    }
    public static void getLen(List lst) {
        try {
            //获取类对象
            Class<? extends List> cal=lst.getClass();
            //获取类中相应属性;
            Field filed=cal.getDeclaredField("elementData");
            filed.setAccessible(true);
            //获取属性
            Object[] object=(Object[]) filed.get(lst);
            //获取数组的长度
            System.out.println("当前List集合的大小为:"+object.length);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}


4. 装箱、拆箱

  值类型->引用类型 装箱

  引用类型->值类型 拆箱

  jdk1.5之后引入了自动装箱及自动拆箱功能

public static void main(String[] args) {
        //泛型:以类型作为参数的类叫做泛型
        //作用:提高程序的健壮性、简化代码
        //泛型的默认类型:object
        //JDK1.5之后
        List lst=new ArrayList();
        lst.add(2);
        lst.add(4);
        lst.add(6);
        lst.add(9);
        //获取迭代器
        //Iterator it=lst.iterator();
        ListIterator<Iterator> it=lst.listIterator();
        while(it.hasNext()) {
            //获取元素
            Object val=it.next();
            //类型转换
            int unm=Integer.valueOf(val.toString());
            //获取偶数
            if(unm%2==0) {
                System.out.println(unm);
            }
        }
        //装箱、拆箱jdk1.5之前需要手动转拆箱(之后自动转拆箱)
        //装箱:值类型->引用类型
        int a=1;
        Integer a1=new Integer(a);
        //拆箱:引用类型->值类型
        Float f=new Float(1.5f);
        float floatValue=f.floatValue();
    }

5. ArrayList、LinkedList、Vector区别

  ArrayList:以连续的数组结构存储数据,查询快(下标)、增删改慢

  LinkedList:以链表的结构存储数据,查询慢、增删改快

  Vector:增删改查都慢,已过时


总结:

LinkedList是以链表的结构存储数据,查询慢、增删改快

LinkedList的特有方法:

①addFirst(E e) : 向集合中的开头添加元素

②addLast(E e):向集合的末尾添加元素

③getFirst():得到集合中的第一个元素

④getLast():得到集合中的最后一个元素

⑤removeFirst():删除集合中的第一个元素

⑥removeLast():删除集合中的最后一个元素

⑦pop(E e) : 从集合的最上面弹出一个元素

⑧push():向集合的最上面添加元素

⑨isEmpty() : 判断集合中是否有为空

相关文章
|
19天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
9天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
527 8
|
8天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
19 2
|
8天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
14天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
30 5
|
14天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
2月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
31 5
|
1月前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
39 1
|
2月前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
2月前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
下一篇
无影云桌面