set容器

java的集合框架最全详解

不想你离开。 提交于 2020-01-01 15:13:07
java的集合框架最全详解(图) 前言: 数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作的方法。 在Java语言中,Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(具体实现接口的类)。所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。 Java程序员在具体应用时,不必考虑数据结构和算法实现细节,只需要用这些类创建出来一些对象,然后直接应用就可以了,这样就大大提高了编程效率。 1. 先说Set和List: 1.1. Set子接口:无序,不允许重复。List子接口:有序,可以有重复元素。具体区别是 Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。<对应类有 HashSet,TreeSet> List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。<相应类有 ArrayList,LinkedList,Vector> Set和List具体子类: 2.2. < 实例比较> HashSet:以哈希表的形式存放元素,插入删除速度很快。 ArrayList:动态数组,LinkedList:链表、队列、堆栈。

@autowired注入静态变量

浪子不回头ぞ 提交于 2019-12-30 15:14:48
@Autowired private static UserRepository userRepository; 当我们直接对静态变量进行注入的时候,会报: NullPointerException ; 解决方法: 为变量添加get set方法 private static UserRepository userRepository;  //get方法 public static UserRepository getUserRepository(){ return userRepository; }  //set方法 @Autowired public void setUserRepository(UserRepository userRepository){ ThreadParameterUtil.userRepository=userRepository; } 注意:   这里的set方法不是静态的,否则会出现和上边一样的问题,还是无法实例化对象;      UserRepository 类上一定要添加@Component注解或者类似注解,可以让Spring容器扫描到; 来源: https://www.cnblogs.com/wanghj-15/p/12119801.html

c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

纵饮孤独 提交于 2019-12-30 04:26:26
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同) set模板原型://Key为元素(键值)类型 1 template < class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > 从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。 set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数:clear()--清除所有元素 c++ stl容器set成员函数:count()--返回某个值元素的个数 c++ stl容器set成员函数:empty()--如果集合为空,返回true c++ stl容器set成员函数:end()-

C++ set容器简单用法

半城伤御伤魂 提交于 2019-12-30 04:23:39
set是关联容器,类似于集合,里面的元素不会重复,而且呈现为有序性 常用操作: using namespace std; set<int>:s; 1.元素插入:s.insert() 2.中序遍历:类似vector遍历(用迭代器) set<int>::reverse_iterator rit=s.begin(); while(rit!=s.end()) {   printf("%d",*rit++); } 3.反向遍历:利用反向迭代器reverse_iterator。 set<int>::reverse_iterator rit; for(rit=s.rbegin();rit!=s.rend();rit++) 4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。 set<int> s; s.erase(2); //删除键值为2的元素 s.clear(); 5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。 set<int> s; set<int>::iterator it; it=s.find(5); //查找键值为5的元素 if(it!=s.end()) //找到 cout<<*it<<endl; else //未找到 cout<<"未找到"; C++成员函数: c++ stl容器set成员函数:begin()-

set--常见成员函数及基本用法

左心房为你撑大大i 提交于 2019-12-30 04:21:55
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。 set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。 1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素 2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数 3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同) set模板原型://Key为元素(键值)类型 1 template < class Key, class Compare=less<Key>, class Alloc=STL_DEFAULT_ALLOCATOR(Key) > 从原型可以看出,可以看出比较函数对象及内存分配器采用的是默认参数,因此如果未指定,它们将采用系统默认方式。 set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数:clear()--清除所有元素 c++

STL之set&multiset使用简介

风格不统一 提交于 2019-12-30 04:16:45
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 为何每次insert之后,以前保存的iterator不会失效? iterator这里就相当于指向节点的指针,内存没有变,指向内存的指针怎么会失效呢(当然被删除的那个元素本身已经失效了)。相对于vector来说,每一次删除和插入,指针都有可能失效,调用push_back在尾部插入也是如此。因为为了保证内部数据的连续存放,iterator指向的那块内存在删除和插入过程中可能已经被其他内存覆盖或者内存已经被释放了。即使时push_back的时候,容器内部空间可能不够,需要一块新的更大的内存,只有把以前的内存释放,申请新的更大的内存,复制已有的数据元素到新的内存,最后把需要插入的元素放到最后,那么以前的内存指针自然就不可用了。特别时在和find等算法在一起使用的时候,牢记这个原则:

【STL__set_的应用】

爱⌒轻易说出口 提交于 2019-12-30 04:13:48
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器, 更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表, map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯, 以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户在STL使用过程中,并不会感到陌生。 关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型, 并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。 应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部 采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好 于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 2.set中常用的方法 begin()    ,返回set容器的第一个元素 end()      ,返回set容器的最后一个元素 clear()    ,删除set容器中的所有的元素 empty()    ,判断set容器是否为空 max

STL---set

别说谁变了你拦得住时间么 提交于 2019-12-30 04:11:19
set set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器 set, multiset, map, multimap 内部采用的就是一种非常高效的平衡检索二叉树: 红黑树,也成为RB树(Red-Black Tree) 。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。 常用操作: 1. begin(),返回set容器的第一个元素 end(),返回set容器的最后一个元素 rbegin(),返回的值和end()相同 rend(),返回的值和rbegin()相同 2. clear(),删除set容器中的所有的元素 empty(),判断set容器是否为空 3. max_size(),返回set容器可能包含的元素最大个数 size(),返回当前set容器中的元素个数 4. count() 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。 find() ,返回给定值值得定位器,如果没找到则返回end()。也可用来判断某一键值是否在set出现过了。 5. erase

学习java(9)集合概述

南楼画角 提交于 2019-12-29 22:48:46
一、集合概述: 1、java的集合类是一些常用的数据结构,例如:队列、栈、链表…… 2、java集合就像一种“容器”,用于存储数量不等的对象,并按照规范实现一些常用的操作和算法。程序员在使用java的集合类是,不必考虑数据结构和算法的具体实现细节,根据需要直接使用这些集合类并调用相应的方法即可,从而提高了开发效率。 二、java集合框架: 1、在5.0之前,java集合会丢失容器中所有对象的数据类型。将所有对象都当成object类进行处理,从JDK5.0增加泛型以后,java集合完全支持泛型,可以记住容器中对象的数据类型从而可以编写更简洁、健壮的代码。 2、在java.util.concurrent包下提供了一些多线程的集合类。 3、Java的集合类主要由两个接口派生而出:Collection和Map接口。 三、java中的集合分为三大类: 1、set集合:将一个对象添加到set集合石,set集合无法记住添加顺序,因此set集合中的元素不能重复,否则系统无法识别到该元素,访问set集合中的元素也只能根据元素本身进行访问。 2、list集合:与数组类似,list集合可以记住每次添加元素的顺序,因此可以根据元素的索引访问list集合中的元素,list集合中的元素可以重复且长度是可变的。 3、map集合:每个元素都是有key/value键值对组成

c++STL之常用集合算法

南楼画角 提交于 2019-12-29 13:33:15
set_intersection:求两个容器的交集 set_union:求两个集合的并集 set_difference:求两个集合的差集 1.set_intersection #include<iostream> using namespace std; #include <vector> #include <algorithm> //常用集合算法 set_intersection void myPrint(int val) { cout << val << " "; } void test01() { vector<int>v1; vector<int>v2; for (int i = 0; i < 10; i++) { v1.push_back(i); // 0 ~ 9 v2.push_back(i + 5); // 5 ~ 14 } vector<int>vTarget; //目标容器需要提前开辟空间 //最特殊情况 大容器包含小容器 开辟空间 取小容器的size即可 vTarget.resize(min(v1.size(), v2.size())); //获取交集 vector<int>::iterator itEnd = set_intersection(v1.begin(), v1.end(), v2.begin(), v2.end(), vTarget.begin()