• Collection容器家族(Vector讲解及Stack源码详解)


    Vector讲解

            Vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组。像数组一样,vector类也用从0开始的下标表示元素的位置;但和数组不同的是,当vector对象创建后,数组的元素个数会随着vector对象元素个数的增大和缩小而自动变化。

            Vector的数据结构和ArrayList差不多,它包含了3个成员变量:elementData , elementCount, capacityIncrement。

    (01) elementData 是"Object[]类型的数组",它保存了添加到Vector中的元素。elementData是个动态数组,如果初始化Vector时,没指定动态数组的>大小,则使用默认大小10。随着Vector中元素的增加,Vector的容量也会动态增长,capacityIncrement是与容量增长相关的增长系数,具体的增长方式,请参考源码分析中的ensureCapacity()函数。

    (02) elementCount 是动态数组的实际大小。

    (03) capacityIncrement 是动态数组的增长系数。如果在创建Vector时,指定了capacityIncrement的大小;则,每次当Vector中动态数组容量增加时>,增加的大小都是capacityIncrement。

            但由于它底层数据结构是数组、查询快、增删满、线程不安全,所以不经常使用,通常使用ArrayList代替它。

    Stack类详解

    一、Stack继承的父类、接口及概述

                                 

            Stack类,作为java对栈结构的实现,具有先进后出、后进先出的特点。它的实现方式是基于Vector集合类实现的,Stack类自己本身有5个栈的常用方法(压栈、出栈、查看栈顶元素、判断栈是否为空、查找栈内指定元素),除了这几个方法外,他还可以使用其父类Vector类的公共方法。但是对于一个栈,基本的的压栈出栈查找元素就足够了。

    二、方法详解

    1.进栈方法 push(E item)

        /**
         * 功能:进栈
         * 实现:调用父类Vector的addElement方法在数组尾部添加元素
         */
        public E push(E item) {
            addElement(item);
    
            return item;
        }

    2.出栈 pop()

        /**
         * 功能:出栈
         * 实现:调用父类的removeElementAt移除并返回数组尾部的元素
         */
        public synchronized E pop() {
            E       obj;
            int     len = size();
    
            obj = peek();
            removeElementAt(len - 1);
    
            return obj;
        }

    3.查看栈顶元素 peek()

        public synchronized E peek() {
            int     len = size();
    
            if (len == 0)
                throw new EmptyStackException();
            return elementAt(len - 1);
        }

    4.判断栈是否为空 isEmpty()

        public boolean empty() {
            return size() == 0;
        }

    5.查找栈内元素 search(Object obj)

        public synchronized int search(Object o) {
            int i = lastIndexOf(o);
    
            if (i >= 0) {
                return size() - i;
            }
            return -1;
        }

            Stack类的方法就这5个,他的所有实现功能都是基于Vector类的方法。

    三、基本使用Demo

        @Test
        public void test1() {
            Stack<String> stack = new Stack<>();
            stack.push("hello");
            stack.push("world");
            stack.push("java");
            
            System.out.println("empty:" + stack.empty());
            System.out.println("peek:" + stack.peek());
            System.out.println("peek:" + stack.search("world"));
    
            while (!stack.isEmpty()) {
                System.out.println(stack.pop());
            }
        }
  • 相关阅读:
    前端学习
    json服务器
    https
    猎聘第一个项目总结
    biao项目技术点评
    编码
    Java补充
    MySQL无法同时执行多条语句解决办法
    Java 源码 Optional 类
    Java 源码 ArrayList 集合类
  • 原文地址:https://www.cnblogs.com/IdealSpring/p/11871202.html
Copyright © 2020-2023  润新知