iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java 中的vector和list的区别和使用实例详解
  • 274
分享到

Java 中的vector和list的区别和使用实例详解

vectorlist区别 2023-05-31 06:05:06 274人浏览 独家记忆
摘要

要了解vector,list,deque。我们先来了解一下STL。 STL是Standard Template Library的简称,中文名是标准模板库。从根本上说,STL是一些容器和算法的集合。STL可分为容器(containers)、迭

要了解vector,list,deque。我们先来了解一下STL。

STL是Standard Template Library的简称,中文名是标准模板库。从根本上说,STL是一些容器算法集合。STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(alGorithms)、仿函数(functors)六个部分。指针被封装成迭代器,这里vector,list就是所谓的容器。

我们常常在实现链表,栈,队列或者数组时,都会写着一些重复或者相似的代码,还要考虑各种可能出现的问题。而STL的引入,大大提高了代码的复用性。我们在实现这些代码时,只要引入头文件就可以灵活的应用了。

vector的使用

连续存储结构:vector是可以实现动态增长的对象数组,支持对数组高效率的访问和在数组尾端的删除和插入操作,在中间和头部删除和插入相对不易,需要挪动大量的数据。它与数组最大的区别就是vector不需程序员自己去考虑容量问题,库里面本身已经实现了容量的动态增长,而数组需要程序员手动写入扩容函数进形扩容。

Vector的模拟实现

template <class T>class Vector{public:  typedef T* Iterator;  typedef const T* Iterator;  Vector()    :_start(NULL)    ,_finish(NULL)    ,_endOfStorage(NULL)  {}  void template<class T>  PushBack(const T& x)  {    Iterator end = End();    Insert(end, x);  }  void Insert(Iterator& pos, const T& x)  {    size_t n = pos - _start;    if (_finish == _endOfStorage)    {      size_t len = Capacity() == 0 ? 3 :  Capacity()*2;      Expand(len);    }    pos = _start+n;    for (Iterator end = End(); end != pos; --end)    {      *end = *(end-1);    }    *pos = x;    ++_finish;  }  Iterator End()  {    return _finish;  }  Iterator Begin()  {    return _start;  }  void Resize(size_t n, const T& val = T())//用Resize扩容时需要初始化空间,并且可以缩小容量  {    if (n < Size())    {      _finish = _start+n;    }    else    {      Reserve(n);      size_t len = n-Size();      for (size_t i = 0; i < len; ++i)      {        PushBack(val);      }    }  }  void Reserve(size_t n)//不用初始化空间,直接增容  {    Expand(n);  }  inline size_t Size()  {    return _finish-_start;  }  inline size_t Capacity()  {    return _endOfStorage-_start;  }  void Expand(size_t n)  {    const size_t size = Size();    const size_t capacity = Capacity();    if (n > capacity)    {      T* tmp = new T[n];      for (size_t i = 0; i < size; ++i)      {        tmp[i] = _start[i];      }      delete[] _start;      _start = tmp;      _finish = _start+size;      _endOfStorage = _start+n;    }  }  T& operator[](size_t pos)  {    assert(pos < Size());    return _start[pos];  }  const T& operator[](size_t pos) const  {    assert(pos < Size());    return _start[pos];  }protected:  Iterator _start; //指向第一个元素所在节点  Iterator _finish; //指向最后一个元素所在节点的下一个节点  Iterator _endOfStorage; //可用内存空间的末尾节点};

--结束END--

本文标题: Java 中的vector和list的区别和使用实例详解

本文链接: https://www.lsjlt.com/news/223766.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java 中的vector和list的区别和使用实例详解
    要了解vector,list,deque。我们先来了解一下STL。 STL是Standard Template Library的简称,中文名是标准模板库。从根本上说,STL是一些容器和算法的集合。STL可分为容器(containers)、迭...
    99+
    2023-05-31
    vector list 区别
  • java中 String和StringBuffer的区别实例详解
    java中 String和StringBuffer的区别实例详解String:           是对象不是原始类型.  &nb...
    99+
    2023-05-31
    string stringbuffer buf
  • vector,map,list,queue的区别详细解析
    1。vector  (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间岁间的插入,删除元素要慢,而且如果一开始分配的空间不够的...
    99+
    2022-11-15
    vector map list queue
  • 详解java中List中set方法和add方法的区别
    目录前言相同点不同点总结前言 在Java中的常用的集合接口List中有两个非常相似的方法: E set(int index, E element); void add(int ind...
    99+
    2022-11-13
    java List中set和add区别 java set add区别
  • Java中class和Class的区别示例详解
    目录一.class与Class区别二.Class介绍三.如何得到Class对象1.通过getClass()方法获取到Class对象2.通过forName()方法获取到Class对象3...
    99+
    2024-04-02
  • 在Java中ArrayList 和Vector的区别是什么
    Java中ArrayList和Vector的区别:ArrayList在性能方面要优于Vector。Vector使用了Synchronized来实现线程同步,是线程安全的,而ArrayList是非线程安全的。ArrayList通用性强,可以使...
    99+
    2024-04-02
  • 详解Java中==和equals()的区别
    目录1. ==1.1 基本数据类型1.2 引用数据类型1.3 小结2. equals3. 总结1. == == 是运算符,用来判断两个值是否相等,==可以使用在基本数据类型变量和引用...
    99+
    2024-04-02
  • Java中equals和==的区别详解
    目录1.java中的数据类型,可分为两类: 2.再稍微改动一下程序,会有更奇怪的发现: 3. 字符串缓冲池 4.再次更改程序: 总结1.java中的数据类型,可分为两类: 1.基本...
    99+
    2024-04-02
  • 一篇文章让你轻松理解C++中vector和list区别
    目录一张表格让你理解vector和list区别例子总结一张表格让你理解vector和list区别 区别vectorlist数据结构:顺序表(动态数组)环形双向链表物理空间:连续的非连...
    99+
    2024-04-02
  • Java中Exception和Error的区别详解
    世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确的处理好意外情况,才能保证程序的可靠性。 java语...
    99+
    2024-04-02
  • java中StringStringBuffer和StringBuilder的区别详解
    目录从声明定义上来谈从结构上来谈从线程安全来谈总结从声明定义上来谈 只有String 可以 直接声明创建 而 StringBuffer 与 StringBuilder 必须去new...
    99+
    2024-04-02
  • Java中的vector类使用方法示例详解
     基本操作示例VectorApp.javaimport java.util.Vector; import java.lang.*; import java.util.Enumeration; public class Vector...
    99+
    2023-05-31
    java vector ava
  • js中Map和Set的用法及区别实例详解
    目录首先了解一下 Map再来了解一下 Set总结Map和Set的区别结语:首先了解一下 Map Map 是一组键值对的结构,和 JSON 对象类似。 (1) Map数据结构如下 这里...
    99+
    2024-04-02
  • 详解JS中? ?和?. 和||的区别
    目录1、 与 || 的区别2、 和 . 的区别1、 与 || 的区别 1)相同点: 和 || 的用法相同,都是前后是值,中间用符号连接,根据前面的值来判断最终是返回前面的值还是后面...
    99+
    2024-04-02
  • 详解C++ STL vector容量(capacity)和大小(size)的区别
    很多初学者分不清楚 vector 容器的容量(capacity)和大小(size)之间的区别,甚至有人认为它们表达的是一个意思。本节将对 vector 容量和大小各自的含义做一个详细...
    99+
    2024-04-02
  • Java 中泛型 T 和 ? 的区别详解
    目录泛型中 T 类型变量 和 通配符 区别Generic Types 类型变量用法2.声明通用的方法 – 泛型方法:有界类型参数Wildcards 通配符1.上界通配符...
    99+
    2024-04-02
  • Java使用Runnable和Callable实现多线程的区别详解
    使用Runnable和Callable接口实现多线程的区别 先看两种实现方式的步骤: 1.实现Runnable接口 public class ThreadDemo{ publ...
    99+
    2024-04-02
  • go install和go get的区别实例详解
    目录go get 和 go install 的区别go get命变更go get命令变更的原因GOMODULE常用命令总结 go get 和 go install 的区别 ...
    99+
    2023-01-28
    go get go install go install和go get
  • Servlet中/和/*的区别详解
    目录本文提纲版本约定✍正文点拨“市面上”的错误答案1、/用于Servlet,demo:这个urlPatterns是合法的。只不过它属于精确匹配,也就是说别看它中间有*,仍...
    99+
    2024-04-02
  • mysql中#{}和${}的区别详解
    #{}会将传入的数据当成一个字符串,会对自动传入的数据加一个双引号 order by #{userId}   这里假如userId = 111,那么解析成sql时...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作