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() : 判断集合中是否有为空

相关文章
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
9天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
33 3
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
188 3
|
26天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
44 5
|
2月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
253 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
47 4
|
2月前
|
消息中间件 Java 数据库连接
Java 反射最全详解 ,框架设计必掌握!
本文详细解析Java反射机制,包括反射的概念、用途、实现原理及应用场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 反射最全详解 ,框架设计必掌握!
|
2月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
74 2
|
2月前
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
142 1
下一篇
开通oss服务