set容器

java集合框架详解

纵然是瞬间 提交于 2019-11-29 09:40:37
一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1 :数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2 :数组容易固定无法动态改变,集合类容量动态改变。 3 :数组无法判断其中实际存有多少元素, length 只告诉了数组的容量,而集合的 size() 可以确切知道元素的个数 4 :集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式 5 :集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率 二、 Java 集合 此图可用 Windows 系统自带画图工具查看比较清晰 Collection 和 Map ,是集合框架的根接口。 Collection 的子接口: Set: 接口 --- 实现类: HashSet 、 LinkedHashSet Set 的子接口 SortedSet 接口 --- 实现类: TreeSet List: 接口 --- 实现类: LinkedList,Vector,ArrayList List 集合 有序列表,允许存放重复的元素; 实现类: ArrayList :数组实现,查询快,增删慢,轻量级; ( 线程不安全 ) LinkedList :双向链表实现,增删快

STL(九)---set和multiset

北慕城南 提交于 2019-11-29 03:22:54
简介 在头文件set>中定义 namespace std { template <typename T, typename Compare = less<T>, typename Allocator = allocator<T> > class set; template <typename T, typename Compare = less<T>, typename Allocator = allocator<T> > class multiset; } set和multiset都是关联容器,是有序的集合,集合中包含不可重复的、类型为Key的元素。排序通过使用类型为Compare的比较函数比较来实现。搜索,删除和插入操作具有对数时间复杂度。set和multiset通常都以红黑树实现。multiset相对set来说能够允许重复值的存在。 set和multiset不提供用来直接存取元素的任何操作函数 通过迭代器进行元素间存取,有一个限制:从迭代器角度看,元素值是常数。 set和multiset操作 构造、复制与析构 set c //默认构造函数;创建一个空set/multiset set c(op) //创建一个空set/multiset,并以op原则作为排序准则 set c(c2) //复制构造函数;创建一个新的set/multiset作为c2的副本(所有元素都被复制) set

java集合(list,set,map)

此生再无相见时 提交于 2019-11-29 01:54:07
java集合(list,set,map) 集合 集合与数组 数组 (可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合 (只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。 注:数组我在前面的博客讲了大家可以看下 集合中接口和类的关系 Collection 接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。Set中不能包含重复的元素。List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。 Map 是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。 Iterator 所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法: 1. hasNext() 是否还有下一个元素。 2. next() 返回下一个元素。 3. remove() 删除当前元素。 层次图 图一这个比较简单 图二完整 list,set,map对比 接口 子接口 是否有序 是否允许元素重复 Collection            否   List   

Java20List和Set接口2

房东的猫 提交于 2019-11-28 22:16:11
Set接口 我们之前说的list接口是 对于数据怎么存然后怎么取,数据中课一存入重复值,有数组下标,而set接口则是 没有数组下标 不可以存重复值 并且怎么存的不一定怎么取 这里数组是通过equals方法来判断是否存在重复数值的他将会用 hashCode()与 equals()方法。 hashCode()就是对数组中的内容进行判断 并且按照一定的方式计算出一个值来通过equals方法跟其他值进行比较 想hashSet中村元素时 add方法先调用hachcode方法计算哈希值 如果容器中没有相同的哈希值直接吧该元素存入集合 如果有相同的哈希值 则调equals方法 判断内容 一样就丢弃 不一样才存入集合 set接口中的HashSet子类就是通过这种方式进行存储元素的 所以当我们创建实体类是 如果要用到次方法 就必须要重写equals方法和hashcode方法 再就是ASCII码表 记住常用的几个 然后推导就行 48--0 65--A   97--a 来源: https://www.cnblogs.com/axu-xxx/p/11429609.html

集合(一)

微笑、不失礼 提交于 2019-11-28 18:58:45
备注:若有不正之处,请多谅解并欢迎批评指正。转载请标明链接: https://www.cnblogs.com/pmbb/p/11421506.html 1. 集合的概念和作用 集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合接口分为:Collection和Map,list、set实现了Collection接口 集合和数组的区别 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数 4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率 此图可用 Windows 系统自带画图工具查看比较清晰 Collection 和 Map ,是集合框架的根接口。

set容器

二次信任 提交于 2019-11-28 18:20:52
set容器简介: 1) set是一个 集合 容器,其中所包含的元素是 唯一 的, 集合中的元素按一定的顺序排列 。 元素插入过程是按排序规则插入 ,所以不能指定插入位置。 2) set采用 红黑树 变体的数据结构实现,红黑树属于平衡二叉树。在插入操作和删除操作上比vector快。 3) set不可以直接存取元素。(不可以使用at.(pos)与[]操作符)。 4) multiset与set的区别:set支持唯一键值,每个元素值只能出现一次;而multiset中 同一值可以出现多次 。 5) 不可以直接修改set或multiset容器中的元素值,因为该类容器是自动排序的。如果希望修改一个元素值,必须先删除原有的元素,再插入新的元素。 (红黑树的变体,查找效率高,插入不能指定位置,插入时自动排序) set/multiset对象的默认构造 set<int> setInt; //一个存放int的set容器。 set<float> setFloat; //一个存放float的set容器。 set<string> setString; //一个存放string的set容器。 multiset<int> mulsetInt; //一个存放int的multi set容器。 multi set<float> multisetFloat; //一个存放float的multi set容器。 multi

Java.数据结构.集合体系详解

一个人想着一个人 提交于 2019-11-28 14:47:01
I. 第一部分:常见数据结构 首先简单说下数据结构. 什么是数据结构?数据结构就是组织数据的方式. 常见的数据结构:栈,堆,树,图,数组,队列,链表. 这里主要介绍与java集合体系相关的栈、数组和链表. 栈 特点:压栈弹栈,先进后出. 如:手枪弹夹装弹过程,最先压入的子弹在最下面;而在射击时,最先弹入枪膛的是最上面的子弹,即最后压入弹夹的子弹. 队列 特点:先进先出. 如:子弹射出的过程,先进入枪膛的子弹最先被射出. 数组 概述:用来存储同一种类型元素的容器。 特点:在内存中是连续的,每个元素都有编号(从0开始的),方便获取。但增删就比较麻烦,需要将目标位置后的所有数据前移动或后移. 查询快,增删慢. 链表 概述:把一些结点通过链子连接起来的数据结构。每个结点由地址域和数值域组成. 特点:增删快,查询慢. 增删时,只需要把所插入处的前后节点链条断开,增加或移除目标节点,速度很快。反之,查询时则需要遍历所有节点,直到找到目标节点,速度自然要慢。 II. 第二部分:Java中的Collection(集合)体系 2.1 集合体系概览: 集合体系分为4大块: Collection接口: Collection是最基本集合接口,它定义了一组允许重复的对象. 它有两个子接口:List和Set. 1. List下3个实现类:ArrayList, LinkedList, Vector.

Java集合详解

会有一股神秘感。 提交于 2019-11-28 13:50:37
一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数 4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率 二、Java集合 此图可用Windows系统自带画图工具查看比较清晰 Collection和Map,是集合框架的根接口。 Collection的子接口: Set:接口 ---实现类: HashSet、LinkedHashSet Set的子接口SortedSet接口---实现类:TreeSet List:接口---实现类: LinkedList,Vector,ArrayList List集合 有序列表,允许存放重复的元素; 实现类: ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全) LinkedList:双向链表实现,增删快,查询慢 (线程不安全) Vector:数组实现,重量级 (线程安全

STL之set容器和multiset容器

早过忘川 提交于 2019-11-28 05:33:39
摘要:本文主要介绍了set容器和multiset容器的相关内容。 1、基本概念 set容器 multiset容器 概念 所有元素都会根据元素的键值自动被排序, 元素即是键值又是实值,不允许两个元素 有相同的键值,元素值不可以被改变 multiset特性及用法和set完全相同, 唯一的差别在于它允许键值重复 实现 set和multiset的底层实现是红黑树,红黑树为平衡二叉树的一种 2、二叉树 2.1 概念 二叉树就是任何节点最多只允许有两个字节点。分别是左子结点和右子节点。 2.2 二叉搜索树 上面我们介绍了二叉搜索树,那么当一个二叉搜索树的左子树和右子树不平衡的时候,那么搜索依据上图表示,搜索9所花费的时间要比搜索17所花费的时间要多,由于我们的输入或者经过我们插入或者删除操作,二叉树失去平衡,造成搜索效率降低。 所以我们有了一个平衡二叉树的概念,所谓的平衡不是指的完全平衡。 RB-tree(红黑树)为二叉树的一种。 3、常用API set multiset API 意义 API 意义 构造函数 set<T> st set默认构造函数 mulitset<T> mst multiset默认构造函数 set(const set &st) 拷贝构造函数 赋值操作 set& operator =( const set &st) 重载等号操作符 swap(st) 交换两个集合容器 大小操作

STL之set容器用法

笑着哭i 提交于 2019-11-27 19:05:19
STL之set容器用法 set中每个元素都唯一,就像集合; set中每个元素都是排好序的,因为内部采用红黑树实现; set区别与vector,它不能通过下标访问; 1.0 头文件 # include <set> 1.1 创建set set < int > S ; //声明一个int型vector set < int > S ( 10 ) ; //初始大小为10 1.2 基本用法 S . size ( ) //集合大小 S . insert ( x ) //插入元素x S . erase ( x ) //删除元素x S . clear ( ) //清空集合 S . count ( x ) //集合中x元素的 1.3 set容器的遍历 //采用iterator迭代 set < int > : : iterator it ; for ( it = S . begin ( ) ; it != S . end ( ) ; ++ it ) cout << ' ' << * it ; //使用auto for ( auto s : S ) cout << s ; 来源: CSDN 作者: 鱼日天 链接: https://blog.csdn.net/luhao19980909/article/details/89913486