数据结构--向量

向量与数组

向量与数组的不同在于,向量是数组结构的一般性推广。数组在创建时内部空间已经确定,是静态的内存管理办法。向量内部空间是动态的内存管理办法。

在Java中,ArrayList 与 Vector都是这种数据结构.

ArrayList 与 Vector的区别

  • Vector的方法都是线程安全的,同步的,而ArrayList不是,由于线程同步必然会影响性能,因此ArrayList的性能比Vector好。
  • 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样,ArrayList就有利于节约内存空间。

向量其实就是在内部实现了一个数组.

有序性向量

有序性甄别

/*
    /*
     * 有序性甄别
     * 核心思路:任何一个有序向量,其相邻元素对必定是逆序或是顺序的。
     * 
     * */
    public int disordered(Vector<Integer> v) {
        int n = 0;
        for(int i = 1 ; i < v.size() ; i++) {
            if(v.get(i - 1) > v.get(i))
                n++;
        }
        return n;
    }

唯一化

==低效版本==

    /*
    此版本因为调用remove()函数,每发现一个重复元素都需要执行删除,再排序。
    其中
    oldSize 是数组原大小
    */
    pubilc int uniquify(){
        int oldSize = _size, i = 1;
        while(i < _size){
            _elem[i - 1]== _elme[i] ? remove(i):i++;//如果有重复元素,执行删除操作,否则i++;
        }
        return oldSize - _size;//此处为伪代码,_size并没有做处理
    }

==高效版本==

    /*
     * 有序向量去重
        此版本,如果元素没有出现雷同
        则 i 与 j 同时实现自增。
        如果元素出现雷同,
        则 i 不变,j 自增,直到元素不相同或者退出循环
        此时如果出现元素不相同,
        则执行v.set(++i,v.get(j),
        相当于将j - i个重复元素忽略。
        最后再进行缩容量
    */  
    /*
     * 存在比较问题,是否会比较对象地址而不是比较值
     * 经不严谨类举实验,当Vector<Integer>用==比较的是值而不是对象的地址
     */
    public int uniquify(Vector<Integer> v) {
        int i = 0 ,  j = 0;
        while(++j < v.size()) {
            if( v.get(i) != v.get(j)) {
                v.set(++i,v.get(j));
            }
        }
        //缩小容量.
        v.setSize(++i);
    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值