当前位置:  编程技术>java/j2ee
本页文章导读:
    ▪Java 数组基础      数组  数组(Array):相同类型数据的集合。 定义数组  方式1(推荐,更能表明数组类型)  type[] 变量名 = new type[数组中元素的个数];  比如:  int[] a = new int[10];  数组名.........
    ▪ibatis 一对多 解决方案      sqlMap文件中的resultMap: <resultMap id="productAndPackageResult" > <result column="ID" property="id" jdbcType="DECIMAL" /> <result column="NAME" property="name" jdbcType="VARCHAR" /> <result colum.........
    ▪spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据      先说一下结论。如果你没有特意在 spymemcached 的 client bean definition 里配置 useNagleAlgorithm 属性为 True,那么默认 spymemcached 是不启用 Nagle 算法的。所以默认情况下不会引发.........

[1]Java 数组基础
    来源:    发布时间: 2013-10-14
数组

  数组(Array):相同类型数据的集合。

 

定义数组

  方式1(推荐,更能表明数组类型)

  type[] 变量名 = new type[数组中元素的个数];

  比如:

  int[] a = new int[10];

  数组名,也即引用a,指向数组元素的首地址。

  方式2(同C语言)

  type变量名[] = new type[数组中元素的个数];

  如:

  int a[] = new int[10];

  方式3 定义时直接初始化

  type[] 变量名 = new type[]{逗号分隔的初始化值};

  其中红色部分可省略,所以又有两种:

  int[] a = {1,2,3,4};

  int[] a = new int[]{1,2,3,4};

  其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。

 

数组运用基础

数组长度

  Java中的每个数组都有一个名为length的属性,表示数组的长度。

  length属性是public final int的,即length是只读的。数组长度一旦确定,就不能改变大小。

equals()

  数组内容的比较可以使用equals()方法吗?

  如下程序:

  

public class ArrayTest
{
public static void main(String[] args)
{
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};

System.out.println(a.equals(b));
}
}

  输出结果是false。

  所以证明不能直接用equals()方法比较数组内容,因为没有override Object中的实现,所以仍采用其实现,即采用==实现equals()方法,比较是否为同一个对象。

  怎么比较呢?一种解决方案是自己写代码,另一种方法是利用java.util.Arrays。

  java.util.Arrays中的方法全是static的。其中包括了equals()方法的各种重载版本。

  代码如下:

import java.util.Arrays;
public class ArrayEqualsTest
{
//Compare the contents of two int arrays
public static boolean isEquals(int[] a, int[] b)
{
if( a == null || b == null )
{
return false;
}
if(a.length != b.length)
{
return false;
}
for(int i = 0; i < a.length; ++i )
{
if(a[i] != b[i])
{
return false;
}
}
return true;
}

public static void main(String[] args)
{
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};

System.out.println(isEquals(a,b));
System.out.println(Arrays.equals(a,b));
}
}

 

数组元素不为基本数据类型时

  数组元素不为基本原生数据类型时,存放的是引用类型,而不是对象本身。当生成对象之后,引用才指向对象,否则引用为null。

  如下列程序:

public class ArrayTest2
{
public static void main(String[] args)
{
Person[] p = new Person[3];

//未生成对象时,引用类型均为空
System.out.println(p[0]);


//生成对象之后,引用指向对象
p[0] = new Person(10);
p[1] = new Person(20);
p[2] = new Person(30);

for(int i = 0; i < p.length; i++)
{
System.out.println(p[i].age);
}

}
}
class Person
{
int age;
public Person(int age)
{
this.age = age;

}
}

 


    
[2]ibatis 一对多 解决方案
    来源:    发布时间: 2013-10-14

sqlMap文件中的resultMap:

<resultMap id="productAndPackageResult" >
<result column="ID" property="id" jdbcType="DECIMAL" />
<result column="NAME" property="name" jdbcType="VARCHAR" />
<result column="DISCTRIPTION" property="disctription" jdbcType="VARCHAR" />
<result column="DURATION" property="duration" jdbcType="DECIMAL" />
<result column="STATUS" property="status" jdbcType="DECIMAL" />
<result column="AD_COUNT" property="adCount" jdbcType="DECIMAL" />
<result column="BEGIN_TIME" property="beginTime" jdbcType="DATE" />
<result column="END_TIME" property="endTime" jdbcType="DATE" />
<result column="MARKET_PRICE" property="marketPrice" jdbcType="DECIMAL" />
<result column="PRICE" property="price" jdbcType="DECIMAL" />
<result column="RELEASE_TEL_NUM" property="releaseTelNum" jdbcType="DECIMAL" />
<result column="RELEVANCE_TEL_NUM" property="relevanceTelNum" jdbcType="DECIMAL" />
<result property="productPackageList" column="{productId=ID,areaId=areaId,status=status}"
select="ProductPackageSQL.getByProductId"/>
</resultMap>

注意productPackageList字段是,利用了select="ProductPackageSQL.getByProductId"来实现的。

getByProductId的select是这样的:

 

<select id="getByProductId" resultMap="productPackageResult" parameter>
select * from TB_PRODUCT_PACKAGE where
PRODUCT_ID = #productId#
<isNotNull property="areaId" prepend="and">
AREA_ID = #areaId#
</isNotNull>
<isNotNull property="status" prepend="and">
STATUS = #status#
</isNotNull>

</select>

 

productAndPackageResult 用到的地方:
<select id="getList" resultMap="productAndPackageResult" parameter>
select ID,NAME,DISCTRIPTION,DURATION,STATUS,PRICE,AD_COUNT,BEGIN_TIME,END_TIME,
MARKET_PRICE,PRICE,RELEASE_TEL_NUM,RELEVANCE_TEL_NUM ,#areaId# as areaId,#status# as status
from TB_PRODUCT
<dynamic prepend="where">
<isNotEmpty prepend="and" property="productId">
ID = #productId#
</isNotEmpty
    
[3]spymemcached 的 useNagle 问题与 TCP/IP延迟发送数据
    来源:    发布时间: 2013-10-14
先说一下结论。
如果你没有特意在 spymemcached 的 client bean definition 里配置 useNagleAlgorithm 属性为 True,
那么默认 spymemcached 是不启用 Nagle 算法的。
所以默认情况下不会引发恨少在《libmemcached的MEMCACHED_MAX_BUFFER问题》一文中提及的“shell脚本set 1000次8KB的item,只要3s左右,平均需要3ms。而C++版本则需要39s左右,平均耗时39ms……发现8KB的数据需要发送两次,两次write都是非常快的,但是等memcached返回时用了很多时间,主要的时间就耗费在这个地方”现象。咱们业务中心可以排除这个嫌疑。
 
什么是 Nagle 算法?
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能地利用网络带宽,TCP总是希望尽可能地发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。
Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。

        Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释): 

      (1)如果包长度达到MSS,则允许发送;

      (2)如果该包含有FIN,则允许发送;

      (3)设置了TCP_NODELAY选项,则允许发送;

      (4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送; 


    
最新技术文章:
▪Java中使用开源库JSoup解析HTML文件实例
▪Java函数式编程(一):你好,Lambda表达式
▪Java函数式编程(二):集合的使用
▪Java函数式编程(三):列表的转化
▪Java函数式编程(四):在集合中查找元素
▪Java函数式编程(五):闭包
▪Java函数式编程(六):Optional
▪Java函数式编程(七):MapReduce
▪Java函数式编程(八):字符串及方法引用
▪Java函数式编程(九):Comparator
▪Java函数式编程(十):收集器
▪Java函数式编程(十一):遍历目录
▪Java函数式编程(十二):监控文件修改
▪Java编程中的一些常见问题汇总
▪java之super关键字用法实例解析
▪java生成jar包的方法
▪java之static关键字用法实例解析
▪java方法重写实例分析
▪java之this关键字用法实例分析
▪Java中避免空指针异常的方法
▪Java Web使用简单的批处理操作(记事本+Tomcat)
▪java对象转型实例分析
▪java之Object类用法实例
▪java继承中的构造方法实例解析
▪Java String字符串和Unicode字符相互转换代码
▪Java注解之Retention、Documented、Inherited介绍
▪Java中对AtomicInteger和int值在多线程下递增操作...
▪Java设计模式之装饰者模式详解和代码实例
▪Java8新特性之字符串去重介绍
▪Java网络编程基础教程之Socket入门实例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3