set容器

Java中的list和set有什么区别

北城余情 提交于 2019-12-08 19:32:29
Java中的集合共包含三大类,它们分别是Set(集),List(列表)以及Map(映射)。 List方法与set方法的区别 (1)重复对象 list方法可以允许重复的对象,而set方法不允许重复对象 (2)null元素 list可以插入多个null元素,而set只允许插入一个null元素 (3)容器是否有序 list是一个有序的容器,保持了每个元素的插入顺序。即输出顺序就是输入顺序,而set方法是无序容器,无法保证每个元素的存储顺序,TreeSet通过 Comparator 或者 Comparable 维护了一个排序顺序 (4)常用的实现类 list方法常用的实现类有ArrayList、LinkedList 和 Vector。其中ArrayList 最为流行,它提供了使用索引的随意访问,而LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适,Vector 表示底层数组,线程安全 Set方法中最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基于 HashMap实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 TreeSet 是一个根据其 compare() 和compareTo() 的定义进行排序的有序容器 来源: https://www.cnblogs.com/qqyy/p

集合详解

痴心易碎 提交于 2019-12-06 08:33:19
集合是存放对象的引用的容器。 集合 = 数组/其他内存结构 + 可变长度 + 一堆方法 + 简单操作。 集合类型主要有3种: set、list和map 。 | | | |------>HashSet | | |->Set-----|------>TreeSet | | | |------>LinkedHashSet 自己了解 | | | | | Collection------| |------>ArrayList | | |->List----|------>Vector 自己了解 | | |------>LinkedList 自己了解 | |_______________________________________________________________________________| | | | |------>HashMap | | Map--------------------->Map----|------>TreeMap | | |------>Hashtable 自己了解 | 1.Set list基本操作:Collection接口声明了Set接口、List接口的通用方法 1.1 boolean add(Object o);向集合中添加数据 1.2从集合中取数据 2.1list.get(i);//取list集合的i+1个对象 2.2 Iterator

06-集合框架

只谈情不闲聊 提交于 2019-12-06 06:34:09
集合框架 一、Collection集合 集合:Java中提供的一种容器,用来存储多个数据。Collection是单列集合类的根接口。 集合和数组的区别: 1.数组的长度是固定。集合的长度是可变的。 2.数组中存储的是同一类型元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以 不一致。 Collection常用功能 public boolean add(E e) : 把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素。 public boolean remove(E e) : 把给定的对象在当前集合中删除。 public boolean contains(E e) : 判断当前集合中是否包含给定的对象。 public boolean isEmpty() : 判断当前集合是否为空。 public int size() : 返回集合中元素的个数。 public Object[] toArray() : 把集合中的元素,存储到数组中。 Iterator迭代器 原理: ​ 首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。 ​ Iterator迭代器对象在遍历集合时

STL容器set用法以及codeforces 685B

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-05 16:48:29
以前没怎么用过set,然后挂训练赛的时候发现set的妙用,结合网上用法一边学一边写. 首先set是一种容器,可以跟其他STL容器一样用 set<int > s 来定义, 它包含在STL头文件#include<set>中. 其内部是用红黑树来实现的, 一个是保证set里面是有序的, 默认的排序是从小到大排序, 而且set容器的元素都是唯一的, 如果里面的元素允许重复那就用 multiset 容器来实现. 1. set的常用操作 s.begin() 返回set容器的第一个元素的位置(第一个迭代器) s.end() 返回set容器的最后一个元素的位置(最后一个迭代器) s.clear() 清空set容器 s.empty() 判断set容器是否为空 s.insert() 插入一个元素 s.erase() 删除一个元素 s.size() 返回容器里面有多少个元素s.max_size() 返回set容器可以包含的元素最大个数 实例:#include<bits/stdc++.h> using namespace std; typedef long long ll; set<int> s; int main(int argc, char * argv[]){ s.clear(); if(s.empty()) cout<<"容器是空的"<<endl; else cout<<"容器不是空的"<

STL关联式容器

帅比萌擦擦* 提交于 2019-12-05 12:20:59
关联式容器的特征:所用元素都会根据元素的键值自动被排序。 set STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口。 set元的元素不会像map那样同时拥有键(key)和值(value)。 set元素的键就是值,值就是键,并不允许两个元素有相同的键。 multiset允许相同键值存在。 因为set元素的键和值相等,所以不允许对set元素的值进行修改。(数据结构会根据key对元素进行排序,对value的更改会改变树中元素的排列顺序)。 set容器提供的迭代器为 const iterator; set类的声明: template <class _Key, class _Compare, class _Alloc> class set; set类含三个模板参数,键类型_Key,键比较方法_Compare,分配器类型_Alloc;平时经常用到的是第一个模板参数:键类型_Key,如: set<int> iset={1,2,3,4,5}; 另外两个模板参数在特殊的应用场景上会发挥作用。_Compare模板参数可以指定容器中元素的比较方法,根据容器存放元素的大小,可修改内存分配策略_Alloc。这两个参数都可已通过设置set的构造函数参数来进行指定: explicit set(const _Compare& __comp, const allocator

java集合总览

不羁岁月 提交于 2019-12-05 06:23:49
在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap等等! 上面的图展示了整个集合大家族的成员以及他们之间的关系。下面就上面的各个接口、基类做一些简单的介绍(主要介绍各个集合的特点。区别),更加详细的介绍会在不久的将来一一讲解。 一、Collection接口 Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。 在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素

Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet

空扰寡人 提交于 2019-12-04 16:56:54
这几天看了下容器的源码,总结一下HashSet vs TreeSet vs LinkedHashSet的区别, 如下图,collection的继承实现分支,这里先只讲解set分支 1、HashSet vs TreeSet vs LinkedHashSet三者的数据结构分析 (1)HashSet:由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。对于HashSet中保存的对象,请注意正确重写其equals和hashCode方法,以保证放入的对象的唯一性。 注意:hashSet是利用HashMap的key进行数据存储。同时HashMap的key具有唯一性 参考:http://www.cnblogs.com/ITtangtang/p/3948538.html (2) TreeSet:TreeSet实际上是TreeMap实现的。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。 参考:http://www.cnblogs.com/skywang12345/p/3311268.html (3) LinkedHashSet: LinkedHashSet也是一个集合,与HashSet不同的是

Java基础集合篇03-Map集合

和自甴很熟 提交于 2019-12-04 04:07:37
1. Map集合 1.1 Map集合介绍 Map集合是一个存储数据的容器。 Map集合存储数据的方式是键值对(key/value)。 key键不可以重复(若重复设置,则会覆盖原有key对应的值)。 value值可以重复。 Map集合的底层数据结构是哈希表(数组+链表/红黑树)。 1.2 Map集合和Collection集合区别 Collection集合是单例集合 元素的种类是单个 Map集合是双例集合。 元素的种类是一对 图解: 单例集合和双例集合 1.3 Map集合常用子类 HasMap 是Map集合的一个子类 底层数据结构是哈希表 键不可以重复(键对应的类型需要重写了hashCode()和equals方法()),值可以重复。 存取是无序的(存取顺序可能不一致) LinkedHashMap 是HashMap集合的一个子类 底层数据结构是哈希表+链表(记录存取顺序) 键不可以重复(键对应的类型需要重写了hashCode()和equals方法()),值可以重复。 存取是有序的(存取的顺序一定是一致的) 注意事项:Map接口中的集合都有两个泛型变量,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量的数 据类型可以相同,也可以不同。 1.4 Map接口中常用方法 方法 public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。 public

Java 集合框架

南楼画角 提交于 2019-12-03 12:18:50
早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。 虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。 集合框架被设计成要满足以下几个目标。 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的扩展和适应必须是简单的。 为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList , HashSet , 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

set容器与map容器的简单应用

倾然丶 夕夏残阳落幕 提交于 2019-12-03 10:18:24
set容器中一些函数,取自百度其他大佬已总结好的,如有侵权,请联系删除! set的各成员函数列表如下: c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器 c++ stl容器set成员函数:clear()--清除所有元素 c++ stl容器set成员函数:count()--返回某个值元素的个数 c++ stl容器set成员函数:empty()--如果集合为空,返回true c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器 c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器 c++ stl容器set成员函数:erase()--删除集合中的元素 c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器 c++ stl容器set成员函数:get_allocator()--返回集合的分配器 c++ stl容器set成员函数:insert()--在集合中插入元素 c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器 c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数 c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值 c++