set容器

学习数据结构的第八天(二)

青春壹個敷衍的年華 提交于 2020-04-04 09:43:50
力扣T349 class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set1=new TreeSet<>(); //这里又涉及到数组和set的转换了 Set<Integer> set2=new TreeSet<>(); for(int i:nums1) set1.add(i); for(int i:nums2) set2.add(i); Set<Integer> set3=new HashSet<>(); for(int i:set2) { if(set1.contains(i)) set3.add(i); } int []arr=new int [set3.size()]; //对于其他集合转为数组,总是要去考虑到指针的问题 int index=0; //treeset可以通过顺序的方法遍历吗? for(int i:set3) { arr[index++]=i; } // for(int i=0;i<set3.size();i++) // { // arr[i]=set3.get(i); get方法和数组的形式都是不可以的。 // } return arr; } } 这里的集合求交集和350的区别: 这里交集的含义: 返回的集合不能有重复的元素 不能有重复的元素这件事

STL--set使用用法

我们两清 提交于 2020-04-01 05:22:03
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器。( 相同的值不存,存进去自动排序好了 ) set/multiset会根据待定的排序准则,自动将元素排序 。两者不同在于 前者不允许元素重复(重复元素只操作一遍,其他的忽略处理), 而后者允许。(因为插入的时候,它们分别调用的是insert和unique_insert) 同理,map和multimap也是这个意思。set、map它们的 底层都是基于红黑树 。 set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。 平衡二叉检索树的检索使用中序遍历算法,检索效率高于vector、deque、和list的容器。另外,采用中序遍历算法可将键值由小到大遍历出来,所以,可以理解为平衡二叉检索树在插入元素时,就会自动将元素按键值从小到大的顺序排列。 set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数:clear()--清除所有元素 c++ stl容器set成员函数:count()--返回某个值元素的个数 c++ stl容器set成员函数:empty()--如果集合为空

JAVA基础——集合类汇总

醉酒当歌 提交于 2020-03-29 20:24:48
一、集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 二、层次关系 如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口 Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。 Iterator,所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1.hasNext()是否还有下一个元素。 2.next()返回下一个元素。 3.remove()删除当前元素。 三、几种重要的接口和类简介 1、List(有序、可重复) List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时

Java集合类——Set、List、Map、Queue接口

旧街凉风 提交于 2020-03-29 20:23:42
目录 Java 集合类的基本概念 Java 集合类的层次关系 Java 集合类的应用场景 一. Java集合类的基本概念 在编程中,常需要集中存放多个数据,数组是一个很好的选择,但数组的长度需提前指定且不可变,如果我们需要保存一个动态增长的数据(其数量不确定),Java集合类可以很好实现。 集合类又称为容器类。所有的集合类都位于 java.util 包下,为了处理多线程环境下的并发安全问题,在 java.util.concurrent 包下提供了一些多线程支持的集合类。 Java集合类可分为两大类: 1)Collection : 1.1)List必须保持元素特定的顺序 1.2)Set不能有重复元素 1.3)Queue保持一个队列(先进先出)的顺序 2)Map : 保存的是一组 “键值对” 对象 (key-value对) 【虚线箭头表示实现关系,实线箭头表示继承关系】 二. Java集合类的层次关系 1. Iterable<T> 接口 java.lang 下的 Interface Iterable<T> 迭代器接口,是Collecton接口的父接口,包括 default void forEach() 方法 Iterator<T> iterator() 方法 【Iterator<T> 是java.util 下的接口】 实现这个Iterable接口的对象允许使用foreach进行遍历

Java集合类: Set、List、Map、Queue使用

自作多情 提交于 2020-03-29 20:23:20
目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们事先已经明确知道我们将要保存的对象的数量。一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的,如果我们需要保存一个可以动态增长的数据(在编译时无法确定具体的数量),java的集合类就是一个很好的设计方案了。 集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所以的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,java5还在java.util.concurrent包下提供了一些多线程支持的集合类。 在学习Java中的集合类的API、编程原理的时候,我们一定要明白,"集合"是一个很古老的数学概念,它远远早于Java的出现。从数学概念的角度来理解集合能帮助我们更好的理解编程中什么时候该使用什么类型的集合类。 Java容器类类库的用途是"保存对象",并将其划分为两个不同的概念: 1) Collection 一组"对立"的元素,通常这些元素都服从某种规则   1.1) List必须保持元素特定的顺序   1.2) Set不能有重复元素   1.3) Queue保持一个队列(先进先出)的顺序 2) Map 一组成对的

STL 中 map和set的区别

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-26 09:37:54
转自: http://www.cppblog.com/expter/archive/2008/12/06/68714.html stl中: MAP的节点是一对数据. SET的节点是一个数据. Map使用关键值Key来唯一标识每一个成员 map可以重复。 set是集合 都属于关联容器 只不过, map的形式 map<type1, type2> mymap; set的形式 set<type> myset; set(集合)——包含了经过排序了的数据,这些数据的值(value)必须是唯一的。 map(映射)——经过排序了的二元组的集 合,map中的每个元素都是由两个值组成,其中的key(键值,一个map中的键值必须是唯一的)是在排序或搜索时使用,它的值可以在容器中重新获取;而 另一个值是该元素关联的数值。比如,除了可以ar[43] = "overripe"这样找到一个数据,map还可以通过ar["banana"] = "overripe"这样的方法找到一个数据。如果你想获得其中的元素信息,通过输入元素的全名就可以轻松实现。 map是映射集合中的元素不能重复,set可以进行集合的各种操作(交并补等),当然你也可以用list或vector实现set,但是效率会很低。set一般是用平衡树或哈西表实现的。 映射是一种一一对应的关系,哈西表也可以看作是映射的一种。映射通常可用来实现字典结构

STL之set具体解释(二)

筅森魡賤 提交于 2020-03-23 14:58:03
首先来看看set集合容器: set集合容器实现了红黑树的平衡二叉树数据结构。在插入元素时它会自己主动调整二叉树的排列,把该元素放到适当的位置,而且 保证左右子树平衡。平衡二叉检索树採用中序遍历算法。 对于set,vector,map等等,它们的前向迭代器定义是这种(以set为例): set<int>::iterator it; for(it=s.begin();it!=s.end();it++){} 那么反向迭代器呢? set<int>::reverse_iterator rit; for(rit=s.rbegin();rit!=s.rend();rit++){} 经常用法:insert(),erase(),find(),clear() find()方法是查找元素方法。假设找到就返回该元素迭代器的位置,否则就返回最后一个元素后面的一个位置。 这样来使用: it=s.find(5); if(it!=s.end()) {} else {} 关于比較函数: 假设元素不是结构体。而是基本数据类型,那么就自定义一个比較函数: [cpp] view plain copy struct cmp { bool operator()( const int &a, const int &b) { return a>b; } }; int main() { set< int ,cmp> s; for (

C++ Set & MultiSet

倾然丶 夕夏残阳落幕 提交于 2020-03-21 23:50:26
转自 http://www.cppblog.com/wanghaiguang/archive/2012/06/05/177627.html STL Set介绍 集合(Set)是一种包含已排序对象的关联容器。多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象,其用法与set基本相同。 Set 又称集合,实际上就是一组元素的集合,但其中所包含的元素的值是唯一的,且是按一定顺序排列的,集合中的每个元素被称作集合中的实例。因为其内部是通过链表的方式来组织,所以在插入的时候比vector 快,但在查找和末尾添加上比vector 慢。 multiset 是多重集合,其实现方式和set 是相似的,只是它不要求集合中的元素是唯一的,也就是说集合中的同一个元素可以出现多次。 构造: explicit set(const Compare&=compare()); 如:set<int,less<int> > set1; less<int>是一个标准类,用于形成升序排列函数对象。降序排列是用greater<int>。 Template<class InputIterator> set(InputIterator, InputIterator,\ const Compare&=compare()); 如:set<int ,less<int> >set2(vector1.begin()

集合框架问题详解

倾然丶 夕夏残阳落幕 提交于 2020-03-21 18:03:49
3 月,跳不动了?>>> 什么是集合??? 用一句话来概括就是,集合就是存放“类对象“的容器,集合类存放于java.util包中, 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是 指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。集合接口分为:Collection和Map,list、set实现了Collection接口。 集合相对于数组的作用 集合相对于数组来说有很多的优势,比如说集合的长度可以改变,但是数组的长度就不能改变,只要确定后就永远都不可以改变。集合大体分为三种,list集合 set集合和map集合。这三种集合各有优势,我们平时用的大多是list和map。list集合的优势在与读取速度快,适合用来遍历数据,因为list集合根本还是数组,只不过是在数组上面做了很多的运算才使得他可一改变长度。而map集合的优势是他查找数据容易,应为他包含了两个对象,可以很快的查找数据,改变数据。 使用Iterator遍历结合的方法 public class MyTest { public static void main (String[] args) { //1 、 iterator 迭代 ArrayList 集合 List list = new ArrayList<>() ; // 集合

集合框架Collection

孤街醉人 提交于 2020-03-21 03:50:29
Collection定义了集合框架的共性功能。 1,添加 add(e); addAll(collection); 2,删除 remove(e); removeAll(collection); clear(); 3,判断。 contains(e); isEmpty(); 4,获取 iterator(); size(); 5,获取交集。 retainAll(); 6,集合变数组。 toArray(); 1,add方法的参数类型是Object。以便于接收任意类型对象。 2,集合中存储的都是对象的引用(地址) 什么是迭代器呢? 其实就是集合的取出元素的方式。 如同抓娃娃游戏机中的夹子。 迭代器是取出方式,会直接访问集合中的元素。 所以将迭代器通过内部类的形式来进行描述。 通过容器的iterator()方法获取该内部类的对象。 Collection |--List:元素是有序的,元素可以重复。因为该集合体系有索引。 |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。 |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。 |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。     枚举就是Vector特有的取出方式。   发现枚举和迭代器很像。