字符串转换为JSON

1、var json = eval('(' + str + ')');

2、var json = (new Function("return " + str))();

3、var json = JSON.parse(str);

使用JSON.parse需严格遵守JSON规范,如属性都需用引号引起来,如下

复制代码代码如下:
var str = '{name:"jack"}'; 
var obj = JSON.parse(str); // --> parse error 

name没有用引号引起来,使用JSON.parse所有浏览器中均抛异常,解析失败。而前两种方式则没问题。

Oracle数据库重复数据删除

比如,某个表要按照id和name重复,就算重复数据

delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name);
commit;

数据库根据时间字段查询

字段为:日期时间类型(date)

SELECT * FROM testdatetime t WHERE t.startdate = to_date('2011-07-01','yyyy-MM-dd');  
 
JSON.stringify(geometry)报错Converting circular structure to JSON
查看之前的代码发现是循环引用出现了问题
var geometry =obj.geometry(或者var geometry.xx = geometry)
改为 var test = obj.geometry就可以解决了。  

Arrays.copyof(···)与System.arraycopy(···)区别

首先观察先System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)的声明:

  1. public static native void arraycopy(Object src,  int  srcPos,
  2. Object dest, int destPos,
  3. int length);

src - 源数组。 
srcPos - 源数组中的起始位置。 
dest - 目标数组。 
destPos - 目标数据中的起始位置。 
length - 要复制的数组元素的数量。

该方法是用了native关键字,调用的为C++编写的底层函数,可见其为JDK中的底层函数。

  1. //复杂数据类型
  2. public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
  3. T[] copy = ((Object)newType == (Object)Object[].class)
  4. ? (T[]) new Object[newLength]
  5. : (T[]) Array.newInstance(newType.getComponentType(), newLength);
  6. System.arraycopy(original, 0, copy, 0,
  7. Math.min(original.length, newLength));
  8. return copy;
  9. }
  10. public static <T> T[] copyOf(T[] original, int newLength) {
  11. return (T[]) copyOf(original, newLength, original.getClass());
  12. }

由U类型复制为T类型?
original - 要复制的数组 
newLength - 要返回的副本的长度 
newType - 要返回的副本的类型

  1. //基本数据类型(其他类似byte,short···)
  2. public static int[] copyOf(int[] original, int newLength) {
  3. int[] copy = new int[newLength];
  4. System.arraycopy(original, 0, copy, 0,
  5. Math.min(original.length, newLength));
  6. return copy;
  7. }

观察其源代码发现copyOf(),在其内部创建了一个新的数组,然后调用arrayCopy()向其复制内容,返回出去。 
总结: 
1.copyOf()的实现是用的是arrayCopy(); 
2.arrayCopy()需要目标数组,对两个数组的内容进行可能不完全的合并操作。 
3.copyOf()在内部新建一个数组,调用arrayCopy()将original内容复制到copy中去,并且长度为newLength。返回copy;

 

原理


  1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。


  2)利用数组复制方法可以变通的实现数组扩容。


  3)System.arraycopy()可以复制数组。


  4)Arrays.copyOf()可以简便的创建数组副本。


  5)创建数组副本的同时将数组长度增加就变通的实现了数组的扩容。

运用后缀表达式进行计算的具体做法:后缀转中缀

建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

例 : 6 5 2 3 + 8 * + 3 + *

  • 先将前面的数字入栈

    栈 :6 5 2 3

  • 遇到 ” + ” 取栈顶的两个操作数做加法, 2 + 3 = 5 , 入栈

    栈 :6 5 5

  • 遇到 ” 8 ” 入栈

    栈 :6 5 5 8

  • 遇到 ” * ” 取栈顶的两个操作数做乘法, 5 * 8 = 40 , 入栈

    栈 :6 5 40

  • 遇到 ” + ” 取栈顶的两个操作数做加法, 5 + 40 = 45 , 入栈

    栈 :6 45

  • 遇到 ” 3 ” 入栈

    栈 :6 45 3

  • 遇到 ” + ” 取栈顶的两个操作数做加法, 45 + 3 = 48 , 入栈

    栈 :6 48

  • 遇到 ” * ” 取栈顶的两个操作数做加法, 6 * 48 = 288 , 入栈

    栈 :288


中缀表达式转后缀表达式的方法:
1.遇到操作数:直接输出(添加到后缀表达式中)
2.栈为空时,遇到运算符,直接入栈
3.遇到左括号:将其入栈
4.遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
5.遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
6.最终将栈中的元素依次出栈,输出。
例如
a+b*c+(d*e+f)*g ----> abc*+de*f+g*+

遇到a:直接输出:
后缀表达式:a
堆栈:空

遇到+:堆栈:空,所以+入栈
后缀表达式:a
堆栈:+
遇到b: 直接输出
后缀表达式:ab
堆栈:+
遇到*:堆栈非空,但是+的优先级不高于*,所以*入栈
后缀表达式: ab
堆栈:*+
遇到c:直接输出
后缀表达式:abc
堆栈:*+
遇到+:堆栈非空,堆栈中的*优先级大于+,输出并出栈,堆栈中的+优先级等于+,输出并出栈,然后再将该运算符(+)入栈
后缀表达式:abc*+
堆栈:+
遇到(:直接入栈
后缀表达式:abc*+
堆栈:(+
遇到d:输出
后缀表达式:abc*+d
堆栈:(+
遇到*:堆栈非空,堆栈中的(优先级小于*,所以不出栈
后缀表达式:abc*+d
堆栈:*(+
遇到e:输出
后缀表达式:abc*+de
堆栈:*(+
遇到+:由于*的优先级大于+,输出并出栈,但是(的优先级低于+,所以将*出栈,+入栈
后缀表达式:abc*+de*
堆栈:+(+
遇到f:输出
后缀表达式:abc*+de*f
堆栈:+(+
遇到):执行出栈并输出元素,直到弹出左括号,所括号不输出
后缀表达式:abc*+de*f+
堆栈:+
遇到*:堆栈为空,入栈
后缀表达式: abc*+de*f+
堆栈:*+
遇到g:输出
后缀表达式:abc*+de*f+g
堆栈:*+
遇到中缀表达式结束:弹出所有的运算符并输出
后缀表达式:abc*+de*f+g*+
堆栈:空

2017/6Summary的更多相关文章

  1. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  2. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  3. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  4. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  5. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

  6. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...

  7. Create an offline installation of Visual Studio 2017 RC

    Create an offline installation of Visual Studio 2017 RC ‎2016‎年‎12‎月‎7‎日                             ...

  8. .NET Core 2.0版本预计于2017年春季发布

    英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...

  9. 卡巴斯基2017激活教程_卡巴斯基2017用授权文件KEY激活的方法

    原创:天诺时空 更新时间:2016-11-09   2016年9月7日,卡巴斯基2017版全新上市,卡巴斯基依旧为大家奉上满足您所有需求的安全软件产品,为不同年龄层.不同人群给予全方位保护,同时延续卡 ...

随机推荐

  1. XDOJ 1046 - 高精度模板综合测试 - [高精度模板]

    题目链接:http://acm.xidian.edu.cn/problem.php?id=1046 题目描述 请输出两个数的和,差,积,商,取余.注意不要有前导零. 输入 多组数据,每组数据是两个整数 ...

  2. [No0000CE]检测非空格字符作为密码的密码强度

    Regex.Replace(pwd, "^(?:([a-z])|([A-Z])|([0-9])|(.)){6,}|(.)+$", "$1$2$3$4$5").L ...

  3. SPOJ - TSUM 母函数+FFT+容斥

    题意:n个数,任取三个加起来,问每个可能的结果的方案数. 题解:构造母函数ABC,比如现在有 1 2 3 三个数.则 其中B表示同一个数加两次,C表示用三次.然后考虑去重. A^3表示可重复地拿三个. ...

  4. OpenGL开发学习指南二(glfw+glad)

    版权声明:本文为博主原创文章,未经博主允许不得转载.blog.liujunliang.com.cn https://blog.csdn.net/qq_33747722/article/details/ ...

  5. [archlinux] 迁移T7从T460s到T470

    这已经不是第一次做OS的迁移了,T7早已经迁移过多台设备了.所以,其实只需要如下三步: 1.  rsync 我一直有全系统备份的习惯,T7一直会不定期的全系统rsync到Tstation上面去.所以我 ...

  6. public private protected extends

    public公共,加上这个修饰的类或属性,可以在同一个包或者别的包里面访问 private私有的,加上这个修饰的类或属性,只能在同类里访问,同包和别的包不能访问 protected保护,加上这个修饰的 ...

  7. mysql windows开启客户端连接权限

    use mysql;  select 'host' from user where user='root';  update user set host = '%' where user ='root ...

  8. webpack打包配置模板

    /** * Created by zzq on 2017/3/26. *///__dirname是node.js中的一个全局变量,它指向当前执行脚本所在的目录module.exports = {//注 ...

  9. springboot注入properties配置到javabean

    一.再application.properties中添加 二. @Value("${field}")在字段上面加个注解

  10. 【Python基础】Pycharm默认快捷键

    PyCharm常用快捷键和设置 代码快速运行: Alt+Shift+F10  编辑代码的时候经常的要换下一行,但是光标没有在行末,可以用这个命令直接换行: Shift+Enter 行注释/取消行注释: ...