遍历

Map集合相关

前提是你 提交于 2020-02-05 02:38:14
F:\IdeaProjects\baisc-codeII\day04-code Map集合概述 Map集合是一个双列集合,一个集合包含两个值,Key和Value; key不能重复,一个key对应一个value; 常用的有HashMap集合和LinkedHashMap集合。 HashMap<K,V>:存储数据采用的是哈希表结构,元素存取顺序不一致。 LinkedHashMap<K,V>:是HashMap的子类,存储数据采用的是哈希表+链表,链表保证了元素存取数据顺序一致。 二者都重写了hashCode()和equals()方法,来保证key的唯一性,区别是有序和无序,本篇所有示例均为HashMap集合。 常用方法 put(key,value):如果key不重复,返回值V是null;如果重复,会使用新的value替换重复的value,并返回旧value; remove(key):如果key存在,返回被删除的value,如果不存在,返回null; get(key):如果key存在,返回对应的值,不存在返回null; containsKey(key):包含返回true,不包含返回false; Map集合遍历 主要有两种遍历方式 方式1:通过键找值的方式 1.使用map集合中的方法keySet(),把Map集合中所有的key取出来,存储到一个set集合中 2.遍历set集合,获取每一个键 3

从0开始学大数据-Hive性能优化篇

家住魔仙堡 提交于 2020-02-05 02:37:52
在工作中使用hive比较多,也写了很多HiveQL。这里从三个方面对 Hive 常用的一些性能优化进行了总结。 表设计层面优化 利用分区表优化 分区表 是在某一个或者几个维度上对数据进行分类存储,一个分区对应一个目录。如果筛选条件里有分区字段,那么 Hive 只需要遍历对应分区目录下的文件即可,不需要遍历全局数据,使得处理的数据量大大减少,从而提高查询效率。 当一个 Hive 表的查询大多数情况下,会根据某一个字段进行筛选时,那么非常适合创建为分区表。 利用桶表优化 指定桶的个数后,存储数据时,根据某一个字段进行哈希后,确定存储在哪个桶里,这样做的目的和分区表类似,也是使得筛选时不用全局遍历所有的数据,只需要遍历所在桶就可以了。 选择合适的文件存储格式 Apache Hive 支持 Apache Hadoop 中使用的几种熟悉的文件格式。 TextFile 默认格式,如果建表时不指定默认为此格式。 存储方式:行存储。 每一行都是一条记录,每行都以换行符 \n 结尾。数据不做压缩时,磁盘会开销比较大,数据解析开销也比较大。 可结合 Gzip 、 Bzip2 等压缩方式一起使用(系统会自动检查,查询时会自动解压),但对于某些压缩算法 hive 不会对数据进行切分,从而无法对数据进行并行操作。 SequenceFile 一种Hadoop API 提供的二进制文件,使用方便、可分割

day13_Collection、泛型

旧时模样 提交于 2020-02-05 01:54:38
Collection集合 集合概述 在前面基础班我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢? 集合: 集合是java中提供的一种容器,可以用来存储多个数据。 集合和数组的区别 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。 学习集合的目标 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 学习集合的方式 学习顶层: 学习顶层的接口/抽象类共性的方法,所有的子类都可以使用 使用底层: 顶层不是抽象类就是接口,无法创建对象使用。我们要使用底层的实现类来创建对象使用。 集合框架 JAVASE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用。集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection 和双列集合 java.util.Map。Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.List 和 java.util.Set 。其中, List 的特点是元素有序、元素可重复丶有索引可以使用普通for循环遍历。

深度优先遍历

流过昼夜 提交于 2020-02-05 00:52:51
树的深度优先遍历的递归写法: 图的深度优先遍历遍历,要在树的遍历的基础上,还需要记录哪些节点被遍历了,以避免重复遍历的问题。图的深度优先遍历的代码: 可以看出,图的深度优先遍历的核心要素: 获取临界点:adj函数; 如何标识当前状态已经遍历过了:visited函数。 当然,如果要对其他因素做判断,可以在dfs函数的for循环前面增加判断逻辑。 来源: CSDN 作者: 夜雨落花 链接: https://blog.csdn.net/weixin_38569499/article/details/104166947

自然数的拆分

可紊 提交于 2020-02-04 19:15:19
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。 当n=7共14种拆分方法: 7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2+2 7=1+1+1+4 7=1+1+2+3 7=1+1+5 7=1+2+2+2 7=1+2+4 7=1+3+3 7=1+6 7=2+2+3 7=2+5 7=3+4 total=14【输入】 输入n。 【输出】 按字典序输出具体的方案。 【输入样例】 7【输出样例】 7=1+1+1+1+1+1+1 7=1+1+1+1+1+2 7=1+1+1+1+3 7=1+1+1+2+2 7=1+1+1+4 7=1+1+2+3 7=1+1+5 7=1+2+2+2 7=1+2+4 7=1+3+3 7=1+6 7=2+2+3 7=2+5 7=3+4 思路 根据搜索回溯法,观察输出,发现最后一项1 变二且项数减少,即最后一次遍历时,使遍历停止的条件增加了1;要想按格式输出,还需要在输出时知道项数,因此,函数中应该有项数的变化和使遍历停止的条件的变化。 # include <iostream> using namespace std ; int n ; int a [ 100000 ] = { 1 } ; //输入的数的值的范围未给出,应该开大一些,但对于较大数据的测试,这种方法就有些不好了; void

PAT乙1007:素数对猜想

僤鯓⒐⒋嵵緔 提交于 2020-02-04 16:50:29
问题描述: 让我们定义d​n​​为:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。 现给定任意正整数 N (<10​5​​),请计算不超过 N 的满足猜想的素数对的个数。 输入格式: 输入在一行给出正整数 N 。 输出格式: 在一行中输出不超过 N 的满足猜想的素数对的个数。 输入样例: 20 输出样例: 4 问题分析: 这题主要思路就是把不超过N的所有的素数算出来,然后遍历一下,是否满足差为2的相邻素数,满足就在计数中+1。然后输出总数即可。这题核心在于计算素数,素数就是我们小学的时候学的那个质数,即只有1和本身是公因数的数。最笨的办法就是进行遍历相除,当前的数与从2开始一直遍历到比自己小1的那个数进行求余,当出现余数为0时,则不为素数,否则为素数。用这个方式进行求解,在问题提交时,会出现超时的问题。所以,为了提高查找素数的效率,我们只需比较到当前数的开根号即可。因为一个数的公因数都是成对出现的,开根号的情况下,只需要判断少量的参数,这样就可以提升计算效率了。 代码: #pragma warning(disable:4996) #include <stdio.h> #include <math.h> using namespace std; int

es6的基本数据详解

一笑奈何 提交于 2020-02-04 15:01:03
一、Set 基本用法: 1)ES6提供了新的数据机构-Set。 它类似于数组,但是成员的值都是唯一的,没有重复的值。Set本身是一个构造函数,用来生成Set数据结构。 先来看一段最简单的代码: 1 2 3 var s = new Set(); [2,3,5,4,5,2,2].map(x =>s.add(x)); for(i of s){console.log(i)} 得到的结果是2 3 5 4,上面的代买通过add方法向Set结构加入成员,结构表明Set结构不会添加重复的值。 Set函数可以接受一个数组作为参数,用于初始化。 1 2 var set = new Set([1,2,3,4,4]); console.log([...set]); 结果是在控制台输出了[1,2,3,4],这两个例子都可以证明Set的成员值都是唯一的,没有重复的值。但是向Set加入值时不会发生类型转换,所以10和“10”是两个不同的值。Set内部判断两个值是否不同的算法类似于精确相等运算符(===)。这意味着,两个对象总是不相等的。唯一的例外是NaN等于自身(精确相等运算符认为NaN不等于自身)。下面看一个对象的添加例子,就能更清楚上面的话了。 1 2 3 4 let set =new Set(); set.add({}); set.add({}); console.log(set.size); /

ES6笔记(6)-- Set、Map结构和Iterator迭代器

放肆的年华 提交于 2020-02-04 14:57:18
系列文章 -- ES6笔记系列 搞ES6的人也是够无聊,把JS弄得越来越像Java、C++,连Iterator迭代器、Set集合、Map结构都出来了,不知道说什么好... 一、简单使用 1. iterator 学过C++的人应该知道这是个迭代器对象,拥有一个指针,指向数据结构中的某个成员 JS中的iterator也有类似的功能,JS内部为一些数据结构实现了iterator迭代器的接口,让我们可以方便的使用 var [a, b, ...c] = [1, 2, 3, 4]; c // [3, 4] 如上,解构赋值以及扩展运算符的便利,多亏了内部实现的默认iterator迭代器接口,可以使用其Symbol.iterator属性获得,如 var arr = [1, 2, 3]; var it = arr[Symbol.iterator](); it.next() // {done: false, value: 1} it.next() // {done: false, value: 2} it.next() // {done: false, value: 3} it.next() // {done: true, value: undefined} 上述的iterator接口表现形式过于隐秘,在generator生成器函数中,我们可以看看比较显示的iterator接口调用: function

925. 长按键入

人走茶凉 提交于 2020-02-04 07:15:29
解题思路: 1.在typed中查找name中的字符,分别遍历两个字符串,如果在typed中有name中的字符,则flag=true,并循环查找直到遇到与当前name中的字符不相等的字符,此时的计数器为num2 2.循环遍历name中的字符,直到遇到前后两个字符不相等的字符,则开始下一轮遍历,记录name中累计遍历的字符数num1 3.如果num1>num2或者当亲轮的flag=false,则返回false 4.遍历结束返回true 代码实现: class Solution { public boolean isLongPressedName(String name, String typed) { int len1=name.length(); int len2=typed.length(); int i=0; int j=0; while(i<len1){ boolean flag=false; int num1=1; int num2=0; while(j<len2&&name.charAt(i)==typed.charAt(j)){//在typed中查找name中的字符 flag=true;//查到了 j++; num2++; } if(!flag) {//没查到 return false; } i++; while(i<len1&&name.charAt(i)==name

lintcode73. 前序遍历和中序遍历树构造二叉树

吃可爱长大的小学妹 提交于 2020-02-04 07:08:17
根据前序遍历和中序遍历树构造二叉树. 样例 样例 1 : 输入: [ ] , [ ] 输出: { } 解释: 二叉树为空 样例 2 : 输入: [ 2 , 1 , 3 ] , [ 1 , 2 , 3 ] 输出: { 2 , 1 , 3 } 解释: 二叉树如下 2 / \ 1 3 注意事项 你可以假设树中不存在相同数值的节点 /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; * TreeNode(int val) { * this->val = val; * this->left = this->right = NULL; * } * } */ class Solution { public : /** *@param preorder : A list of integers that preorder traversal of a tree *@param inorder : A list of integers that inorder traversal of a tree *@return : Root of a tree */ TreeNode * buildTree ( vector < int > & preorder ,