欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

基于java构造方法Vector修改元素源码分析

程序员文章站 2022-04-03 20:58:41
目录set(int,e)方法分析setelementat(e,int)方法分析(注意:本文基于jdk1.8)前言增删改查,修改元素,vector提供了3个方法,包括迭代器中的一个,不过本文只分析vec...

(注意:本文基于jdk1.8)

基于java构造方法Vector修改元素源码分析

前言

增删改查,修改元素,vector提供了3个方法,包括迭代器中的一个,不过本文只分析vector自身的两个修改元素的方法,迭代器中的方法将单独分析

set(int,e)方法分析

    public synchronized e set(int index, e element) {
        if (index >= elementcount)
            throw new arrayindexoutofboundsexception(index);
 
        e oldvalue = elementdata(index);
        elementdata[index] = element;
        return oldvalue;
    }

用于修改某个下标的方法,该方法使用synchronized修饰,这是为了保护共享变量elementdata被多个线程同时修改,在同一时刻只有一个线程可以执行该方法,其它未获得对象锁的线程将会阻塞在方法的入口,等待对象锁的释放,传入的参数index表示要修改哪个下标的元素,传入的参数element表示要修改成哪个新的元素对象

1、检查下标是否合法

合法的下标,必须是小于vector对象持有的elementcount数的,因为只有0到elementcount-1的下标才保存着元素,其它下标均会抛出一个arrayindexoutofboundsexception对象,用于提示用户,传入的下标有问题……

2、获取当前下标处已保存的元素对象

使用elementdata()方法,传入下标进去即可,获得的旧元素对象,将临时保存在局部变量oldvalue中

3、将新的元素对象更新到指定下标处

只需elementdata的下标index处,赋值为新的元素对象即可

4、向调用者返回旧的元素对象

setelementat(e,int)方法分析

    public synchronized void setelementat(e obj, int index) {
        if (index >= elementcount) {
            throw new arrayindexoutofboundsexception(index + " >= " +
                                                     elementcount);
        }
        elementdata[index] = obj;
    }

除了反人类的将新的元素对象作为第一个参数外,还有一个重要的区别是,此方法并不会返回旧的元素对象!!

总结

1、替换元素是一种特殊的删除,因为马上就有新的元素对象又添加进来

2、旧的元素对象还可以使用的话,那set(int,e)替换方法本身会返回旧的元素,使用它很方便

以上就是基于java构造方法vector修改元素源码分析的详细内容,更多关于java构造方法vector的资料请关注其它相关文章!