字符串转换为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*+
堆栈:空

最新文章

  1. php面试 1013总结
  2. 【安装mysql数据库】
  3. mysql技巧之select count的比较
  4. (转) C/C++中const关键字详解
  5. java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
  6. Android Grapics图像类体系
  7. cep
  8. 只能从脚本中调用在类定义上有[ScriptService]属性的Web服务问题的解决方案
  9. winsock编程IOCP模型实现代码
  10. Cs Round#54 E Late Edges
  11. amd显卡更新最新驱动鼠标顿卡的解决方法
  12. LeetCode 797. All Paths From Source to Target
  13. Zepto tap 穿透bug、解决移动端点击穿透问题
  14. WordPress版微信小程序2.1.8版发布
  15. 基数排序的理解和实现(Java)
  16. Unity中sharedMaterials 和 materials
  17. 持续集成之Jenkins+Gitlab实现持续集成 [二]
  18. [Java多线程] LinkedBlockingQueue
  19. CentOS 安装第三方yum源
  20. Ubuntu安装Nginx 问题以及解决办法

热门文章

  1. [No000014B]Office-PPT设置默认打开视图
  2. 一个1级分组基础上同时进行2级分组的SQL面试题
  3. find实现特殊功能示例
  4. coreseek搜索
  5. Java与面向对象之随感(1)
  6. mac下安装debug坑
  7. Flink -- Keyed State
  8. Idea下载安装
  9. FTP主动模式和被动模式的区别(转)
  10. vue脚手架搭建流程