set容器

Java中个容器的对比

风格不统一 提交于 2019-12-01 08:37:27
List: 有序,列表存储,元素可重复 Set: 无序,元素不可重复 Map:无序,元素可重复,key不能重复 LinkedList :链表,删除和添加效率很高,随机访问效率较ArrayList类低,允许null。 ArrayList:线性表,随机访问效率类高,添加和删除 效率很低,允许null。 HashSet: Set 类元素不可重复 HashSet利用Hash函数进行了查询效率上的优化,允许null。 HashMap: 提供了key-value的键值,非synchronized比较快,Hash散列机制查找方便,允许null键值和值。 TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。add,remove等基本操作log(n)的时间开销。 来源: https://www.cnblogs.com/mww-NOTCOPY/p/11669571.html

Java基础学习笔记(六) - 数据结构和集合

半世苍凉 提交于 2019-12-01 04:54:32
一、认识数据结构 1.数据结构有什么用? 合理的使用数据结构,可以更方便的查找存储数据。 2.常见的数据结构 数据存储常用结构有:栈、队列、数组、链表和红黑树。 栈:堆栈(stack),它是运算受限的线性表,限制只允许在表(栈顶)的一端进行插入和删除操作。特点是先进后出,栈的入口和出口都在栈的顶端。 队列:简称队(queue),它和堆栈一样都是运算受限的线性表,限制只允许在表一端插入,一端删除。特点是先进先出,队列出口和入口各占一侧。 数组:Array,是有序的元素序列。数组是在内存中开辟一段连续的空间,并在此存放元素。特点是查找元素快(通过数组索引,可以快速定位元素),增删元素慢(每次增删元素都会创建新的数组)。 链表:linked list,由一系列节点(链表中每个元素都被称为节点)node组成,结点在运行时动态生成。每个节点包括两部分:存储数据的数据域和指向下一个节点的指针域。特点查找慢(只能通过节点依次往后查找),增删元素快(只需修改链接下个节点的内存地址即可)。 红黑树:属于二叉树的一种。二叉树,binary tree,是每个结点不超过2的有序树。红黑树的特点是根节点为黑色,叶子节点是黑色的,每个红色节点的子节点都是黑色,任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同。 二、集合 认识集合 集合是Java中提供的一种容器,可以用来存储多个数据。 集合和数组的区别

STLのset与multiset

陌路散爱 提交于 2019-11-30 18:54:57
定义 set set 是一个集合,Objective-C 语言中也有集合的概念。C++中的集合与OC中的集合也有不同的地方。 1、C++的set容器,其中包含的元素是唯一的,而且是有序的。 2、C++的set容器,是按照顺序插入的,不能在指定位置插入。 3、C++的set容器,其结构是红黑二叉树,插入数据的效率比 vector 快 以上内容来自网上 用一句话来概括的话set就是一个 随便操作的数组 ~ 然后有一点set容器是有序的集合,默认的顺序是从小到大的 multiset multiset容器,与set容器相似,但是multiset容器中的元素可以重复。另外,他也是自动排序的,容器内部的值不能随便修改,因为有顺序的。 操作 set 1.find() iterator find(const key_type& __k) find函数查找元素为k的迭代器位置 2.lower_bound() iterator lower_bound(const key_type& __k) lower_bound函数查找小于等于元素k的迭代器位置 3.upper_bound() iterator upper_bound(const key_type& __k) upper_bound函数查找大于元素k的迭代器位置 4.insert() std::pair<iterator,bool> insert(

List、Set、Map详解及区别

自闭症网瘾萝莉.ら 提交于 2019-11-30 10:34:39
一、List接口 List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。 ArrayList ArrayList是一个动态数组,也是我们最常用的集合。它允许任何符合规则的元素插入甚至包括null。每一个ArrayList都有一个初始容量: private static final int DEFAULT_CAPACITY = 10; 随着容器中的元素不断增加,容器的大小也会随着增加。在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。 size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间(由于要考虑到扩容,所以这不只是添加元素会带来分摊固定时间开销那样简单)。 ArrayList擅长于随机访问。同时ArrayList是非同步的。 LinkedList

java面试(1)

◇◆丶佛笑我妖孽 提交于 2019-11-30 10:13:56
Java集合详解【面试+工作】 在说集合前我们不得不说一下 数组 数组的作用: 存放一组相同的数据类型(基本或对象)的数据,从而实现对数据的管理 优势: 可以快速的通过下标对数组元素进行访问,效率高 劣势: 容量实现定义好了,不能随着需求变化而扩容 因此出现了更好的集合框架 一、数组和集合的比较 数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下: 1:数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身! 2:数组容易固定无法动态改变,集合类容量动态改变。 3:数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数 4:集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式 5:集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率 二、Java集合 Collection和Map,是集合框架的根接口。 Collection的子接口: Set:接口 ---实现类: HashSet、LinkedHashSet Set的子接口SortedSet接口---实现类:TreeSet List:接口---实现类: LinkedList,Vector,ArrayList List集合

c++中set的用法

大兔子大兔子 提交于 2019-11-30 03:33:49
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选择作为了关联容器的内部结构。 关于set有下面几个问题: (1)为何map和set的插入删除效率比用其他序列容器高? 大部分人说,很简单,因为对于关联容器来说,不需要做内存拷贝和内存移动。说对了,确实如此。set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多

集合

谁都会走 提交于 2019-11-30 01:37:44
//list:可以存放重复的对象,相同类型//set:没有重复的对象//map:键值对的映射//元组:不同类型的值的集合//option:容器//iterator:迭代器,逐一访问容器内的元素//与python的区别://1."one":1 "one"->1//2.print("x",x) println("x"+x)object collection_test { def main(args:Array[String]): Unit ={ var x_list=List(1,2,3,4) var x_set=Set(1,3,5,7) var x_map=Map("one"->1,"two"->2,"three"->3) var x_tuple=(10,"rubbon") var x_option:Option[Int]=Some(5) println("x_list"+x_list) println("x_set"+x_set) println("x_map"+x_map) println("x_tuple"+x_tuple) println("x_option"+x_option) }} 来源: https://www.cnblogs.com/hapyygril/p/11544227.html

Java集合(5):理解Collection

﹥>﹥吖頭↗ 提交于 2019-11-29 20:35:59
Collection是List、Set、Queue的共同接口。Collection主要方法有: int size(): 返回当前集合中元素的数量 boolean add(E e): 添加对象到集合 boolean remove(Object o): 删除指定的对象 boolean contains(Object o): 查找集合中是否有指定的对象 boolean containsAll(Collection<?> c): 查找集合中是否有集合c中的元素 boolean isEmpty(): 判断集合是否为空 Iterator iterator(): 返回一个迭代器 boolean addAll(Collection<? extends E> c): 将集合c中所有的元素添加给该集合 boolean removeAll(Collection<?> c): 从集合中删除c集合中也有的元素 boolean retainAll(Collection<?> c): 从集合中删除集合c中不包含的元素 void clear(): 删除集合中所有元素 Object toArray(): 返回一个数组,该数组包含容器内所有元素 <T> T[] toArray(T[] a): 返回一个数组,该数组包含容器内所有元素,返回结果的运行时类型与参数a类型相同 List<E> Set<E> Queue<E

Java集合类

夙愿已清 提交于 2019-11-29 20:35:41
Java集合类的用途是 保存对象 ,根据其概念的不同可以划分为两个不同的类别: Collection :一个独立元素的序列,这些元素都服从一条或多条规则。 List 必须按照插入的顺序保存元素, Set 不能有重复元素, Queue 按照队列规则来确定对象顺序。 Map :保存一组成对的 键值对 且允许使用键来查找值。映射表允许我们使用作为 键 的对象来查找对应的 值 对象,在实际编程中的应用十分广泛。 List List 可以将元素维护在特定的序列中。 List 接口在 Collection 的基础上添加了大量的方法,使得可以在 List 的中间插入和移除元素。 有两种类型的 List : ArrayList :基于可变长度数组实现的 List ,长于随机访问其中的元素,但增删元素时效率较低。 LinkedList :基于链表实现的 List ,随机访问相对较慢,但增删元素效率高且对首尾操作方便。 Set Set 不保存重复的元素。如果试图将相同对象的多个实例添加到 Set 中,那么它不会保存后添加的元素。 Set 具有和 Collection 完全一样的接口,因此完全没有任何额外的功能。 常用有三种类型的 Set : HashSet :使用散列函数储存元素,为快速查找进行了专门的优化,所以拥有最快的查找速度。当 hashCode() 和 equals(Object object

java集合框架详解

这一生的挚爱 提交于 2019-11-29 12:44:09
一、概述 Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。 数据与集合的区别 数组长度不可变化而且无法保存具有映射关系的数据;集合类用于保存数量不确定的数据,以及保存具有映射关系的数据。 数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。 二、Collection UML图 其中List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只能根据元素本身来访问;Queue是队列集合;Map代表的是存储key-value对的集合,可根据元素的key来访问value。   上图中淡绿色背景覆盖的是集合体系中常用的实现类,分别是ArrayList、LinkedList、ArrayQueue、HashSet、TreeSet、HashMap、TreeMap等实现类。 collection的API Collection 接口将对象组织到一起。数组不能调整大小,并且只能组织相同类型的对象,而Collections允许添加任何类型的对象,并且不强迫你指定初始大小。 需要注意的重要的一点是, Collection 扩展了