精华内容
下载资源
问答
  • 同步类容器和并发类容器

    万次阅读 多人点赞 2019-07-31 19:22:20
    注意CollectionMap是顶层接口,而List、Set、Queue接口则分别继承了Collection接口,分别代表数组、集合队列这三大类容器。 像ArrayList、LinkedList都是实现了List接口,HashSet实现了Set接口,而Deque(双向...

    一.为什么会出现同步容器?

    在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。

    注意Collection和Map是顶层接口,而List、Set、Queue接口则分别继承了Collection接口,分别代表数组、集合和队列这三大类容器。

    像ArrayList、LinkedList都是实现了List接口,HashSet实现了Set接口,而Deque(双向队列,允许在队首、队尾进行入队和出队操作)继承了Queue接口,PriorityQueue实现了Queue接口。另外LinkedList(实际上是双向链表)同时也实现了Deque接口。

    但以上容器都是非线程安全的。如果有多个线程并发地访问这些容器时,就会出现问题。因此,在编写程序时,必须要求程序员手动地在访问到这些容器的地方进行同步处理,这样导致在使用这些容器的时候非常地不方便。所以,Java提供了同步容器供用户使用。

    二.Java中的同步类容器

    在Java中,同步容器主要包括2类:

      1)Vector、Stack、HashTable

      2)Collections类中提供的静态工厂方法创建的类

    Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是Vector中的方法都是synchronized方法,即进行了同步措施;Stack也是一个同步容器,它的方法也用synchronized进行了同步,它实际上是继承于Vector类;HashTable实现了Map接口,它和HashMap很相似,但是HashTable进行了同步处理,而HashMap没有。

    Collections类是一个工具提供类,注意,它和Collection不同,Collection是一个顶层的接口。在Collections类中提供了大量的方法,比如对集合或者容器进行排序、查找等操作。最重要的是,在它里面提供了几个静态工厂方法来创建同步容器类,如下图所示:

    这些同步容器都是通过synchronized进行同步来实现线程安全的,那么很显然,这必然会影响到执行性能。

    而且虽然他们都是线程安全的,但这并不说明在任何情况下都可以线程安全,看你怎么用了,例如下面的这个例子:

    public class Test {
        static Vector<Integer> vector = new Vector<Integer>();
        public static void main(String[] args) throws InterruptedException {
            while(true) {
                for(int i=0;i<10;i++)
                    vector.add(i);
                Thread thread1 = new Thread(){
                    public void run() {
                        for(int i=0;i<vector.size();i++)
                            vector.remove(i);
                    };
                };
                Thread thread2 = new Thread(){
                    public void run() {
                        for(int i=0;i<vector.size();i++)
                            vector.get(i);
                    };
                };
                thread1.start();
                thread2.start();
                while(Thread.activeCount()>10)   {
                     
                }
            }
        }
    }

    运行结果是在执行过程中会出现数组下标越界的运行时异常。也许有朋友会问:Vector是线程安全的,为什么还会报这个错?很简单,对于Vector,虽然能保证每一个时刻只能有一个线程访问它,但是不排除这种可能,当某个线程在某个时刻执行这句时:

    for(int i=0;i<vector.size();i++)

         vector.get(i);

    假若此时vector的size方法返回的是10,i的值为9,在他要获取下标为9的元素时,有另外一个线程先执行了这句:

    for(int i=0;i<vector.size();i++)

         vector.remove(i);

    将下标为9的元素删除了,在删除过程中因为有锁,所以之前的那个线程无法执行vector.get(i);处于阻塞状态,等这个线程把下标为9的元素删除了之后获取到锁再执行。那么通过get方法访问下标为9的元素肯定就会出问题了。说明这是程序逻辑本身存在线程安全问题,因此为了保证线程安全,必须在方法调用端做额外的同步措施,如下面所示:

    public class Test {
        static Vector<Integer> vector = new Vector<Integer>();
        public static void main(String[] args) throws InterruptedException {
            while(true) {
                for(int i=0;i<10;i++)
                    vector.add(i);
                Thread thread1 = new Thread(){
                    public void run() {
                        synchronized (Test.class) {   //进行额外的同步
                            for(int i=0;i<vector.size();i++)
                                vector.remove(i);
                        }
                    };
                };
                Thread thread2 = new Thread(){
                    public void run() {
                        synchronized (Test.class) {
                            for(int i=0;i<vector.size();i++)
                                vector.get(i);
                        }
                    };
                };
                thread1.start();
                thread2.start();
                while(Thread.activeCount()>10)   {
                     
                }
            }
        }
    }

    三.Java中的并发类容器

    为了解决同步类容器的性能问题,在Java 1.5之后提供了并发容器,位于java.util.concurrent目录下,这个目录俗称并发包。

    3.1、ConcurrentMap

    ConcurrentMap接口下有两个重要的实现:ConcurrentHashMap、ConcurrentSkipListMap。ConcurrentHashMap把整个哈希表分成多个segment,每个segment一把锁,主要通过锁分段技术减小了锁的粒度,降低了冲突,从而提高了并发性。在实际的应用中,散列表一般是读多写少。ConcurrentHashMap 就针对读操作做了大量的优化,运用了很多并发技巧,如不可变对象和使用volatile保证内存可见性,这样,在大多数情况下读操作甚至无需加锁也能获得正确的值。ConcurrentHashMap的concurrencyLevel(默认值为16)表示并发级别,这个值用来确定Segment的个数,Segment的个数是大于等于concurrencyLevel的第一个2的n次方的数。比如,如果concurrencyLevel为12,13,14,15,16这些数,则Segment的数目为16(2的4次方)。理想情况下ConcurrentHashMap的真正的并发访问量能够达到concurrencyLevel,因为有concurrencyLevel个Segment,假如有concurrencyLevel个线程需要访问Map,并且需要访问的数据都恰好分别落在不同的Segment中,则这些线程能够无竞争地自由访问(因为他们不需要竞争同一把锁),达到同时访问的效果。这也是为什么这个参数起名为“并发级别”的原因。该值设置过高会照成空间的浪费,设置过低会降低并发性。这种对调优的把握是要通过对底层实现的深刻理解和不断的实践积累才能获取的。

    3.2、CopyOnWirte容器

    Cope-On-Write简称COW,是一种用于程序设计中的优化策略,称为写时复制,理解起来很简单,就是执行修改操作时进行底层数组复制,使得修改操作在新的数组上进行,不妨碍原数组的并发读操作,复制修改完成后把原数组引用指向新数组。这样做的好处是可以并发的读而不需要加锁,因为当前容器不会添加任何元素,所以也是一种读写分离的思想。但正是因为写时复制,所以不能保证数据的实时性,而只能保证最终一致性。

    在concurrent包下实现CopyOnWrite机制的容器有两种,CopyOnWriteArrayList和CopyOnWriteArraySet。

    CopyOnWriteArrayList中有一个Object数组array用来存放数据,对于set()、add()、remove()等修改数据的操作会加上重入锁ReentrantLock,等修改操作完成替换掉array的引用之后才释放锁,从而保证写操作的线程安全,而针对读操作没有任何锁。

    CopyOnWriteArraySet其实就是一个CopyOnWriteArrayList,不过就是在方法中避免重复数据而已,甚至这些避免重复数据的函数也是在CopyOnWriteArrayList中定义的,CopyOnWriteArraySet中只是包含一个CopyOnWriteArrayList的属性,然后在方法上做个包装,除了equals方法外,其他当前类中的所有函数都是调用的CopyOnWriteArrayList的方法,所以严格来讲可以使用一个CopyOnWriteArrayList作为具有Set特性的写时复制数组(不过就是没有继承AbstractSet)。

    根据CopyOnWirte容器的实现原理可知,CopyOnWirte容器保证读写分离,十分适合读多写少的场景,但不适合写多的场景。

    3.3、线程安全队列

    在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现。java.util.concurrent.atomic包相关类就是CAS的实现。

    ConcurrentLinkedQueue是一个适用于高并发场景下的非阻塞的队列,通过无锁的方式(采用CAS操作),实现了高并发状态下的高性能,通常ConcurrentLinkedQueue的性能优于BlockingQueue。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部,当我们获取一个元素时,它会返回队列头部的元素,该队列不允许NULL元素。

    阻塞队列当队列是空的时候,再想获取元素就会阻塞进入等待状态,所以非常适合生产者-消费者模式。阻塞队列BlockingQueue接口JDK提供了7种实现:

    • ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
    • LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
    • PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
    • DelayQueue:一个使用优先级队列实现的无界阻塞队列。
    • SynchronousQueue:一个不存储元素的阻塞队列。
    • LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
    • LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
    展开全文
  • 学了spring容器之后,最基本的就是这个在中...第Student就完成了,那么我们再建第,在第中创建容器对象,并且调用第Student中的aaa()方法。详见图: 然后我们再配置bean.xml ...

    学了spring容器之后,最基本的就是这个在一个类中调用另一个类中的方法了。本文讲述的就是如何使用spring容器从一个类调用另一个类的方法。首先,我们先新建一个Student类,在类中创建一个int类型的方法。如图:

    在这里插入图片描述

    第一个类Student就完成了,那么我们再建第二个类,在第二个类中创建一个容器对象,并且调用第一个类Student中的aaa()方法。详见图:

    在这里插入图片描述

    然后我们再配置bean.xml 文件(虽然本文中思路可能不一样,但总体要写的代码就是这些。)详见图:

    在这里插入图片描述

    这就是使用spring容器在一个类中调用另一个类的方法的方法了。其他的代码也可以以此类推。

    展开全文
  • 容器

    万次阅读 多人点赞 2019-07-12 09:07:32
    Java 208 道面试题 · 容器 ... java.util.Collection 是个集合接口(集合个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collecti...

    Java 208 道面试题 · 容器

     

    18. java 容器都有哪些?

    常用容器的图录:

     

    19. Collection 和 Collections 有什么区别?

    • java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

    • Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

    20. List、Set、Map 之间的区别是什么?

    21. HashMap 和 Hashtable 有什么区别?

    • hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。

    • hashTable同步的,而HashMap是非同步的,效率上比hashTable要高。

    • hashMap允许空键值,而hashTable不允许。

    22. 如何决定使用 HashMap 还是 TreeMap?

    对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。

    23. 说一下 HashMap 的实现原理?

    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 

    HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

    当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

    需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)

    24. 说一下 HashSet 的实现原理?

    • HashSet底层由HashMap实现

    • HashSet的值存放于HashMap的key上

    • HashMap的value统一为PRESENT

    25. ArrayList 和 LinkedList 的区别是什么?

    最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。

    26. 如何实现数组和 List 之间的转换?

    • List转换成为数组:调用ArrayList的toArray方法。

    • 数组转换成为List:调用Arrays的asList方法。

    27. ArrayList 和 Vector 的区别是什么?

    • Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。 

    • ArrayList比Vector快,它因为有同步,不会过载。 

    • ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

    28. Array 和 ArrayList 有何区别?

    • Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 

    • Array是指定大小后不可变的,而ArrayList大小是可变的。 

    • Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。

    29. 在 Queue 中 poll()和 remove()有什么区别?

    poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。

    30. 哪些集合类是线程安全的?

    • vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。

    • statck:堆栈类,先进后出。

    • hashtable:就比hashmap多了个线程安全。

    • enumeration:枚举,相当于迭代器。

    31. 迭代器 Iterator 是什么?

    迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

    32. Iterator 怎么使用?有什么特点?

    Java中的Iterator功能比较简单,并且只能单向移动:

    (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

    (2) 使用next()获得序列中的下一个元素。

    (3) 使用hasNext()检查序列中是否还有元素。

    (4) 使用remove()将迭代器新返回的元素删除。 

    Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。


    33. Iterator 和 ListIterator 有什么区别?

    • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 

    • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 

    • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

    原文地址:https://blog.csdn.net/sufu1065/article/details/88051083

    展开全文
  • Qt的容器类容器,迭代器

    千次阅读 2016-12-13 13:55:44
    此文乃《Qt中的C++技术》的读书笔记。若喜欢,请支持图书作者。QT中的容器被分为两个大:容器元素是个值的,比如QVector,以及容器元素是个(key, value)对的,比如QMap。

     QT中的容器被分为两个大类:容器元素是一个值的,比如QVector<T>,以及容器元 素是一个(key, value)对的,比如QMap<Key, T>。
        (1)第一大类中,QVector<T>将其所有元素存放在一块连续的内存中。随机访问的速度很快, 但是插入/删除操作很慢。
    QStack<T>是QVector<T>的子类,实现栈的功能。除了具有 QVector<T>的所有功能,它的成员函数push(). pop(). top()实现栈的操作。
            QList<T>在内部使用一个指针数组指向容器元素。能够快速随机访问每个元素。在容器 首、尾添加元素的速度也较快。但是,当元素数量较多而需要在容器中间插入新元素时,需 要移动大量的指针,性能会降低。
            QStringList是QList<QString>的子类,能高效地处理字符串列表。比如,它支持运算符 ,’<<”,以向容器中插入若干字符串。它的成员函数join()能够将所有字符串拼接起来,成员 函数filter()能够使用正则表达式搜索字符串列表。
            QQueue<T>是QList<T>的子类,实现了队列的功能。除了具有QList的所有功能外,它 的成员函数enqueue()将一个新元素添加到容器尾部,dequeue()从容器首部删除一个元素, head()访问但是不删除首部元素。
        QLinkedList<T>能够在很短而且固定的时间内完成元素的插入/删除操作,但是排序、查 找操作却较慢。

        (2)第二大类中,QMap<Key,T> 的元素具有(key,value)形式。所有元素按照key的取值排序, 因而搜索速度很快。一个容器的多个元素都具有相同的key。虽然QMap也能处理这种情况, 但是处理方式烦琐。QMultiMap<Key, T>能够更有效地处理这种情形。它是QMap的子类, 除了具有QMap的绝大部分功能,它的insert函数允许新元素的key和己有元素的key相同。 它不支持运算符“[]”,取而代之的是函数values(),该函数返回所有具有指定key值的元素, 并将它们存放在一个QList对象中。
           QHash<Key, T>的元素也具有(key,value)的形式。它使用哈希表存取key,因而能够快速 地依据key定位某个元素,这个操作的速度比QMap的快。但是,QHash中的元素并没有按 照key的取值排序,降低了搜索的性能。为了处理多个元素具有相同key的情形,QHash也 具有一个子类QMultiHash<Key, T>,其功能与QMultiMap类似。
           QSet<T>内部使用QHash实现集合的功能。QHash的每个元素具有(key,value)形式, QSet<T>令key为T, value为空。由于使用了QHash, QSet能够快速完成集合的插入、元素 定位操作。成员函数unite()合并两个集合,intersect()求取两个集合的交集,substract()求取两 个集合之差,contains()判断一个集合是否含有某个元素。
          QCache<Key, T>的元素也具有(key,value)的形式。和其他容器不同,QCache所能存放的 元素数量被有意地限定。当有新元素需要被插入到容器中时,最近使用频率最低的那些元素 会被删除。
         如何遍历一个容器,两种方法,第一使用迭代器,第二使用Qt定义的关键字foreach。
         foreach最终依靠迭代器来完成遍历操作,但是使用方法很简洁。一般格式如下:
         foreach (variable ,container) statement;
         其中variable的类型应该和container中元素的类型一致。如果这个类型的名字中不含有逗号, 这个变量可以在foreach内部定义,不必提前定义。
    例如:1.使用迭代器
      QList<QString> list;
      list << "A" << "B" << "C" << "D";
     
      
      QList<QString>::iterator i;
      for (i = list.begin(); i != list.end(); ++i)
          qDebug()<< *i ; 
    2.使用foreach 

    QLinkedList<QString> list;

    list << "A" << "B" << "C" << "D";

    foreach (const QString &str, list)

          qDebug() << str;
            foreach在遍历一个容器前,会复制该容器,然后对复制的版本进行遍历。如果在遍历的 过程中修改了容器元素的值,那也只是修改这个复制版本,对原容器不会产生任何影响。由于 Qt采用了隐式共享技术,这个复制操作会很快完成。如果用户希望在迭代的过程中修改 原容器,就应该使用迭代器。

    展开全文
  • 容器和云原生():初识容器化和云原生

    千次阅读 多人点赞 2021-01-29 15:49:45
    目前亟待增加裸金属服务器配置相关知识云原生相关内容,那就从容器云原生下手,本节把基于k8s的容器化知识挂载到自己的知识树上,然后在测试环境进行开发测试; 、理解容器化 什么是容器 容器是云原生...
  • 容器的分类 集合(Set/HashSet) ...因为Set只是接口,所以实际用的是它的个派生HashSet。 集合的常用方法如下: add : 添加元素 clear : 清空容器 contains : 判断容器中是否存在该元素 iterator : 获取第
  • Qt容器类整理

    千次阅读 2015-08-03 17:17:45
    Qt既提供了诸如QVector、QLinkedListQList等的连续容器,也提供...例如,qSort()算法对个连续容器进行排序,qBinaryFind()在经过排序的连续容器上执行进制搜索。 (1)连续容器  QVector是种与数组相似的
  • 在基于 Spring 的应用中,你的应用对象生存于 Spring 容器中。容器是 Spring 框架的核心。Spring 容器使用 DI 管理构成应用的组件,它会创建相互协作的组件之间的关联。...A:第一类:bean 工厂是最简单的
  • Java容器类浅析-----容器类的类型

    千次阅读 2016-05-18 16:41:43
    由类图我们可以看出,Java的容器类一个有两大类型,是存储单值的Collection,另个是存储键值对的Map。 其中Collection的实现有四种:Set、List、Vector、Stack。我们常用的是SetList,顾名思义,Set是...
  • c++容器类

    万次阅读 多人点赞 2012-12-21 09:43:14
    很简单,容器就是保存其它对象的对象,当然这是个朴素的理解,这种“对象”还包含了系列处理“其它对象”的方法,因为这些方法在程序的设计上会经常被用到,所以容器也体现了个好处,就是“容器类种对特定...
  • 同步容器与并发容器类简介

    千次阅读 2018-09-02 11:03:56
      同步容器类包括VectorHashTable,二者都是早期JDK的部分,此外还包括在JDK1.2当中添加的一些功能相似的,这些同步的封装是由Collections.synchronizedXxx等工厂方法创建的。这些实现线程安全的方式是...
  • C++中set multiset 容器类小总结

    千次阅读 2014-03-13 16:38:02
    C++中有两个容器类,对于做编程题的同学,遇到集合问题直接调用是十分方便的,下面我来介绍C++里面的两个容器类 ,它们分别是set multiset。   .set 容器 set是个集合。 需要在c++的编译环境中使用,需要的...
  • QVector 、QLinkedList QList
  • JAVA 容器类总结

    千次阅读 2015-02-04 11:05:17
    原文出处:... 1.java容器分类图  说明:第个图为简化图(其中粗线部分是重点的容器),第个图为完整容器分类图 ...2.容器类接口抽象容器类   2.1 说明  容器接口是容器的基础
  • 我先解释一下题意,现在要设计容器类(intArray2),这个容器的本质就是段数组(暂且只装int值),这个数组可以的索引可以根据使用者传入的数据多少而自动增长,而自动产生新数组覆盖以前的,那么我的疑问就是...
  • 的实例化初始化过程由spring控制。 方法:xml注册Bean xml注册Bean,如果spring配置元数据的方式是xml时,可以手动在xml注册第三方jar包中的。常用来配置本项目中的Bean。 <bean id="service1" class=...
  • QT容器类) 之 Iterator

    千次阅读 2014-01-02 14:33:33
    Qt支持两种风格的迭代器——Java-styleSTL-style Java-style的迭代器更容易使用,而STL-style的迭代器可以同QtSTL中的算法联合使用,更为强大。
  • 【Python】容器类

    千次阅读 2015-07-15 19:50:52
    容器类一度活跃在各大编程语言当中,Python中同样存在容器,同时不像Java中这么复杂,仅保留两个,主要是其列表,也就是可变长数组,相当于Java中的ArrayList,还有个集合,里面的元素无序,不允许重复,相当于...
  • Qt容器类详解

    千次阅读 2016-12-25 22:08:47
    QT不仅支持C++的STL模板库,同时自己也定义了一套容器类和与之操作的算法,使用QT定义的这一套库,可以使在各个平台的表现相同。QT的这些容器被设计为更轻便,更安全更容易使用。容器类是隐含共享(implicitly)的...
  • C++容器概述序列式容器基本操作

    千次阅读 2018-02-02 18:40:31
    容器是一些特定类型对象的集合,容器分为序列式容器和关联容器两种。容器基本操作 容器的一些基本操作如下图:定义和初始化 每个容器都定义了个默认构造函数。除array之外,其他容器的默认构造函数都会创建...
  • Qt中的常用容器类

    万次阅读 2017-03-26 19:47:49
    在Qt库中为我们提供了系列的基于模板的容器类。这些可以被用来存储特定类型的项。例如,如果你需要个大小可以变得QString数组,那么可以使用QVector。
  • MFC容器MFC中容器类的使用

    千次阅读 2013-10-17 14:02:12
    对于MFC中所提到的基本容器类,做个基本的介绍编程操作。  如有数据结构基础,可以直接看第四部分对容器类的操作。  第,MFC提供三种基本的容器类:arrays(数组), lists(链表), maps(映射,也称作...
  • C++ map容器和multimap容器(STL map容器)

    万次阅读 多人点赞 2018-11-08 22:30:05
    1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2.6 map中关键词的排序 3. multimap容器 3.1 ...
  • Docker容器学习笔记

    千次阅读 2020-07-04 13:06:49
    Docker容器学习笔记(狂神说Java) 狂神说B站视频:https://www.bilibili.com/video/BV1og4y1q7M4?p=21 Docker容器学习笔记(狂神说Java):https://blog.csdn.net/qq_41822345/article/details/107123094 文章...
  • 架构师入门笔记 初识java容器

    千次阅读 2017-08-07 14:07:29
    这章来讲解一下同步类容器,并发类容器,COW容器的原理优缺点。 1. 同步类容器 同步类容器:如古老的Vector、HashTable。这些容器的同步功能其实都是有JDK的Collections.synchronized 等工厂方法创建实现的。其...
  • QT容器类之顺序存储容器

    千次阅读 2010-08-20 16:03:00
    容器Containers,有时候也被称为集合collections,指的是能够在内存中存储其他特定类型的对象的对象,这种对象一般是通用的模板。C++提供了一套完整的解决方案,成为标准模板库Standard Template Library,也就是...
  • QT 容器类之关联存储容器

    千次阅读 2010-08-20 23:55:00
    今天我们来说说Qt容器类中的关联存储容器。所谓关联存储容器,就是容器中存储的一般是二元组,而不是单个的对象。二元组一般表述为,也就是“键-值对”。 首先,我们看看数组的概念。数组可以看成是种形式的键-值...
  • 容器:管理对象的地方。 spring,springMVC和web容器的区别? Tomcat(web容器)是管理servlet对象的地方,而spring和springMVC是管理...其次,spring容器和springMVC容器是父子容器的关系,spring容器是父容器,...
  • SpringSpringMVC父子容器关系

    万次阅读 2018-03-31 07:58:04
    、背景 最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了SpringSpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析理解SpringSpringMVC的父子容器...
  • 使用路径容器简化 Eclipse 路径

    千次阅读 2011-08-05 11:03:24
    路径容器种管理项目资源的有效方法,它可以将项目资源分到个逻辑路径条目中。不管您是否了解它,您可能已经使用了路径容器。最被 Java 开发人员认可的路径容器就是 JRE System Library。每个 Java ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542,838
精华内容 217,135
关键字:

一类容器和二类容器