精华内容
下载资源
问答
  • 还有一个故事……(平行世界篇)这是一个关于另外一个平行世界——Java中的相似的故事……文艺复兴.jpg……还有一个美丽的梦幻家园:java.util在Java中,巧了,也有泛型的数据容器。不过,Java的容器C#的组织方式...

    还有一个故事……(平行世界篇)

    这是一个关于另外一个平行世界——Java中的相似的故事……

    文艺复兴.jpg……

    还有一个美丽的梦幻家园:java.util

    在Java中,巧了,也有泛型的数据容器。不过,Java的容器和C#的组织方式有些不同,C#是单独开了一个System.Collections及子命名空间专门用于给容器类使用,而Java则是把容器连同其他的工具类一起丢到了java.util这一个大包中。

    不过,容器的这部分内容似乎在Java里叫做JCF(Java Collections Framework)

    而且,Java似乎不存在非泛型版本的容器,尽管据说SE 5之前的容器普遍存在类型安全性问题(当然已经是过去了……),此外,Java还提供了对应于一些容器的功能接口(而且是泛型接口),方便自定义容器类型,例如,List是列表容器的接口而不是泛型容器,其对应的泛型容器是ArrayList:

    Pigeon p = new Pigeon("咕咕咕"); // class Pigeon extends Bird

    Cuckoo c = new Cuckoo("子规"); // class Cuckoo extends Bird

    List birds = new List() { { add(p); add(c); } }; // 错误,List是容器接口,不能直接实例化

    ArrayList flock = new ArrayList() { { add(p); add(c); } }; // 正确,这是一个泛型为Bird的ArrayList容器

    List avians = new ArrayList() { { add(p); add(c); } }; // 正确,ArrayList实现了List,可视为List的多态

    匿名内部类(AIC)

    这个神奇的初始化写法在Java术语里叫做匿名内部类(AIC,Anonymous Inner Class),在Java中AIC是被广泛使用而且屡试不爽的,主要是用于简化Java代码。AIC的出现使得从一个抽象的接口或抽象类(无法实例化,不提供实现)快速重构一个简单具体类(可以实例化,具有实现)变得非常容易而无需另开文件去写类,而不会造成太大的性能影响(因为AIC是随用随丢的)。

    不过AIC有个不算副作用的副作用,因为AIC往往需要实现(甚至可能是大量改写)接口或抽象类的方法,因此可能会在嵌套层数特别多的上下文中使得原本就比较混乱的局面更加混乱(特别是采用了不当的缩进策略的时候,因为AIC的写法本身在大多数情形下就包含了相当多的嵌套),导致代码可读性严重下降,看起来不是很直观,有碍观瞻。

    此外,如果某个AIC频繁地出现,那么AIC就不那么适用了,这种情况下建议把当前的AIC改成一个具名的类。

    并且还有一个善战的达拉崩巴:HashSet

    更加巧合的是,在java.util里也有一个HashSet,功能也是作为一个哈希集使用,也就是说它也满足如下两点:

    元素是唯一的

    元素是无序的

    What a COINCI-DANCE~~

    而且,也是要分两种情况,值类型下,只要两个值相等,那么第二个元素就不会被添加:

    int i = 5;

    int j = 5;

    HashSet integers = new HashSet();

    integers.add(i); // i被添加到integers中

    integers.add(j); // 没有变化,integers中已经有5了

    而对于引用类型来说,和C#类似,也采用引用一致性判断:

    // 为了简单这里不封装了,直接上字段

    class Student {

    public int id;

    public String name;

    public Student(int id, String name) {

    this.id = id;

    this.name = name;

    }

    }

    public class Program {

    public static void main(String[] args) {

    Student s1 = new Student(1, "Tom");

    Student s2 = new Student(2, "Jerry");

    Student s3 = s1;

    Student s4 = new Student(1,"Tom");

    HashSet students = new HashSet();

    students.add(s1); // s1被加入students中

    students.add(s2); // s2被加入students中

    students.add(s3); // 没有变化,s1已存在

    students.add(s4); // s4被加入到students中,尽管s4和s1长得一样,但引用不一致

    }

    }

    我甚至是差不多拿上篇文章中的代码,几乎没怎么改23333

    但是,和上次一样的问题,尽管s4和s1引用不一致,但实际场合下,我们倾向于把它们当作同一个人,那么怎么办呢??

    还有另外一个故事(不是虚假传说)

    不是虚假传说-序言

    嗯,这个不是虚假的故事,这就是正经的解决方案,放心大胆的读吧!!

    还有一对涂满毒药的夺命双匕:equals和hashCode

    当然,Java里所有对象都继承自java.lang.Object即Object,而Java对象也有两种相等判别方式:==和Object.equals。

    而且,这俩判别方式一模一样,值类型下只要值相等就可以,而对于引用类型,==判别的是引用一致性。

    但是为什么这次标题里没有==的故事了??

    一直就没有,那是你的错觉,上一篇的==还是虚假的故事呢,而且原因也很简单:

    Java里运算符不允许重载。

    而且Object里没有之前的ReferenceEquals,所以==就是引用一致性的兜底判别,没法重载的话那就免谈了,不过equals是父类方法,当然是可以重载的。

    那hashCode呢??

    和隔壁的System.Object.GetHashCode()类似地,这边也有一个java.lang.Object.hashCode(),作用也是类似的,返回一个用作哈希值的数。

    而且更加巧合的是,这里的Object.equals()和hashCode()也没什么关系,单独改写其中一个函数对另外一个函数也都没什么影响。

    最最巧合的是,和隔壁一样,Java也建议equals和hashCode要改都改。

    不过之前是因为非泛型容器(比如Hashtable),而这次是真真正正的为了泛型容器。

    而HashSet正是使用equals和hashCode作为双重判据,HashSet认为equals返回true,且两者hashCode相等的时候,就认为是相同的元素而不被

    那把骑士圣剑呢??

    非常遗憾,这里没有那种东西,java.util并没有提供类似于IEqualityComparer的东西,而HashSet也不提供getComparator()这种方法……

    java.util只提供这个东西——interface Comparator,其作用和C#中的IComparer差不多,因为Java不让重载运算符,因此Comparator提供了compare方法进行的大小比较,而且只是用于比较排序而已。

    然后崩巴也准备开启营救公主的冒险

    最后把程序改写成这个样子:

    import java.util.HashSet;

    class Student {

    public int id;

    public String name;

    public Student(int id,String name) {

    this.id = id;

    this.name = name;

    }

    @Override

    public boolean equals(Object obj) {

    // TODO Auto-generated method stub

    return id == ((Student)obj).id && name.equals(((Student)obj).name);

    }

    @Override

    public int hashCode() {

    return id;

    }

    }

    public class HSetTest {

    public static void main(String[] args) {

    Student s1 = new Student(1,"Tom");

    Student s2 = s1;

    Student s3 = new Student(1,"Tom");

    @SuppressWarnings("serial")

    HashSet students = new HashSet() {

    {

    add(s1); // s1被添加到students中

    add(s2); // 没有变化,s1已存在

    add(s3); // 没有变化,s3被认为和s1逻辑上相等

    }

    };

    for(Student s : students) {

    System.out.println(String.format("%d.%s",s.id,s.name));

    }

    }

    }

    输出结果:

    1.Tom

    展开全文
  • 还有一个故事……(平行世界篇)这是一个关于另外一个平行世界——Java中的相似的故事……文艺复兴.jpg……还有一个美丽的梦幻家园:java.util在Java中,巧了,也有泛型的数据容器。不过,Java的容器C#的组织方式...

    还有一个故事……(平行世界篇)

    这是一个关于另外一个平行世界——Java中的相似的故事……

    文艺复兴.jpg……

    还有一个美丽的梦幻家园:java.util

    在Java中,巧了,也有泛型的数据容器。不过,Java的容器和C#的组织方式有些不同,C#是单独开了一个System.Collections及子命名空间专门用于给容器类使用,而Java则是把容器连同其他的工具类一起丢到了java.util这一个大包中。

    不过,容器的这部分内容似乎在Java里叫做JCF(Java Collections Framework)

    而且,Java似乎不存在非泛型版本的容器,尽管据说SE 5之前的容器普遍存在类型安全性问题(当然已经是过去了……),此外,Java还提供了对应于一些容器的功能接口(而且是泛型接口),方便自定义容器类型,例如,List是列表容器的接口而不是泛型容器,其对应的泛型容器是ArrayList:

    Pigeon p = new Pigeon("咕咕咕"); // class Pigeon extends Bird

    Cuckoo c = new Cuckoo("子规"); // class Cuckoo extends Bird

    List birds = new List() { { add(p); add(c); } }; // 错误,List是容器接口,不能直接实例化

    ArrayList flock = new ArrayList() { { add(p); add(c); } }; // 正确,这是一个泛型为Bird的ArrayList容器

    List avians = new ArrayList() { { add(p); add(c); } }; // 正确,ArrayList实现了List,可视为List的多态

    这个神奇的初始化写法在Java术语里叫做匿名内部类(AIC,Anonymous Inner Class),在Java中AIC是被广泛使用而且屡试不爽的,主要是用于简化Java代码。AIC的出现使得从一个抽象的接口或抽象类(无法实例化,不提供实现)快速重构一个简单具体类(可以实例化,具有实现)变得非常容易而无需另开文件去写类,而不会造成太大的性能影响(因为AIC是随用随丢的)。

    不过AIC有个不算副作用的副作用,因为AIC往往需要实现(甚至可能是大量改写)接口或抽象类的方法,因此可能会在嵌套层数特别多的上下文中使得原本就比较混乱的局面更加混乱(特别是采用了不当的缩进策略的时候,因为AIC的写法本身在大多数情形下就包含了相当多的嵌套),导致代码可读性严重下降,看起来不是很直观,有碍观瞻。

    此外,如果某个AIC频繁地出现,那么AIC就不那么适用了,这种情况下建议把当前的AIC改成一个具名的类。

    并且还有一个善战的达拉崩巴:HashSet

    更加巧合的是,在java.util里也有一个HashSet,功能也是作为一个哈希集使用,也就是说它也满足如下两点:

    元素是唯一的

    元素是无序的

    What a COINCI-DANCE~~

    而且,也是要分两种情况,值类型下,只要两个值相等,那么第二个元素就不会被添加:

    int i = 5;

    int j = 5;

    HashSet integers = new HashSet();

    integers.add(i); // i被添加到integers中

    integers.add(j); // 没有变化,integers中已经有5了

    而对于引用类型来说,和C#类似,也采用引用一致性判断:

    // 为了简单这里不封装了,直接上字段

    class Student {

    public int id;

    public String name;

    public Student(int id, String name) {

    this.id = id;

    this.name = name;

    }

    }

    public class Program {

    public static void main(String[] args) {

    Student s1 = new Student(1, "Tom");

    Student s2 = new Student(2, "Jerry");

    Student s3 = s1;

    Student s4 = new Student(1,"Tom");

    HashSet students = new HashSet();

    students.add(s1); // s1被加入students中

    students.add(s2); // s2被加入students中

    students.add(s3); // 没有变化,s1已存在

    students.add(s4); // s4被加入到students中,尽管s4和s1长得一样,但引用不一致

    }

    }

    我甚至是差不多拿上篇文章中的代码,几乎没怎么改23333

    但是,和上次一样的问题,尽管s4和s1引用不一致,但实际场合下,我们倾向于把它们当作同一个人,那么怎么办呢??

    还有另外一个故事(不是虚假传说)

    不是虚假传说-序言

    嗯,这个不是虚假的故事,这就是正经的解决方案,放心大胆的读吧!!

    还有一对涂满毒药的夺命双匕:equals和hashCode

    当然,Java里所有对象都继承自java.lang.Object即Object,而Java对象也有两种相等判别方式:==和Object.equals。

    而且,这俩判别方式一模一样,值类型下只要值相等就可以,而对于引用类型,==判别的是引用一致性。

    但是为什么这次标题里没有==的故事了??

    一直就没有,那是你的错觉,上一篇的==还是虚假的故事呢,而且原因也很简单:

    Java里运算符不允许重载。

    而且Object里没有之前的ReferenceEquals,所以==就是引用一致性的兜底判别,没法重载的话那就免谈了,不过equals是父类方法,当然是可以重载的。

    那hashCode呢??

    和隔壁的System.Object.GetHashCode()类似地,这边也有一个java.lang.Object.hashCode(),作用也是类似的,返回一个用作哈希值的数。

    而且更加巧合的是,这里的Object.equals()和hashCode()也没什么关系,单独改写其中一个函数对另外一个函数也都没什么影响。

    最最巧合的是,和隔壁一样,Java也建议equals和hashCode要改都改。

    不过之前是因为非泛型容器(比如Hashtable),而这次是真真正正的为了泛型容器。

    而HashSet正是使用equals和hashCode作为双重判据,HashSet认为equals返回true,且两者hashCode相等的时候,就认为是相同的元素而不被

    那把骑士圣剑呢??

    非常遗憾,这里没有那种东西,java.util并没有提供类似于IEqualityComparer的东西,而HashSet也不提供getComparator()这种方法……

    java.util只提供这个东西——interface Comparator,其作用和C#中的IComparer差不多,因为Java不让重载运算符,因此Comparator提供了compare方法进行的大小比较,而且只是用于比较排序而已。

    然后崩巴也准备开启营救公主的冒险

    最后把程序改写成这个样子:

    import java.util.HashSet;

    class Student {

    public int id;

    public String name;

    public Student(int id,String name)

    {

    this.id = id;

    this.name = name;

    }

    @Override

    public boolean equals(Object obj) {

    // TODO Auto-generated method stub

    return id == ((Student)obj).id && name.equals(((Student)obj).name);

    }

    @Override

    public int hashCode() {

    return id;

    }

    }

    public class HSetTest {

    public static void main(String[] args) {

    Student s1 = new Student(1,"Tom");

    Student s2 = s1;

    Student s3 = new Student(1,"Tom");

    @SuppressWarnings("serial")

    HashSet students = new HashSet() {{

    add(s1); // s1被添加到students中

    add(s2); // 没有变化,s1已存在

    add(s3); // 没有变化,s3被认为和s1逻辑上相等

    }};

    for(Student s : students) {

    System.out.println(String.format("%d.%s",s.id,s.name));

    }

    }

    }

    输出结果:

    1.Tom

    展开全文
  • 针对遥感图像数据量大和现有机场检测方法存在的不足,提出了一种去除重复模式,融合直线显著性和区域显著性的机场检测方法。首先利用改进的基于超复数傅里叶变换的显著性模型,去除遥感图像中的重复模式,减少后续...
  • 平行继承体系其实是散弹式修改(Shotgun Surgery)的特殊情况。在这种情况下,每当你为某个... 消除这种重复性的一般策略是:让一个继承体系的实例引用另一个继承体系的实例。如果再接再厉运用 Move Method (搬移函...

      平行继承体系其实是散弹式修改(Shotgun Surgery)的特殊情况。在这种情况下,每当你为某个类增加1个子类,必须也为另一个类相应增加1个子类。如果你发现某个继承体系的类名前缀和另一个继承体系的类名前缀完全相同,便是闻到了这种坏味道。

             消除这种重复性的一般策略是:让一个继承体系的实例引用另一个继承体系的实例。如果再接再厉运用 Move Method (搬移函数)Move Field (搬移字段),,就可以将引用端的继承体系取消。

    转载于:https://www.cnblogs.com/matchcolor/archive/2010/08/02/1787310.html

    展开全文
  • 信号完整分析

    热门讨论 2013-12-11 17:28:53
    ·信号完整性和物理设计概论 ·带宽、电感和特性阻抗的实质含义 ·电阻、电容、电感和阻抗的相关分析 ·解决信号完整性问题的四个实用技术手段:经验法则、解析近似、数值模拟、实际测量 ·物理互连设计对信号...
  • 为了解决质量合格的细煤泥存在重复分选的问题,凤凰台选煤厂对筛缝0.2 mm0.4 mm带有气动击打器的精煤泥弧形筛进行了工业性平行对比试验,试验结果表明:0.2 mm筛缝弧形筛比0.4 mm弧形筛的筛分效率高出16.85个百分点,...
  • Parallel Inheritance Hierarchies其实是shotgun surgery的特殊情况。在这种情况下,每当你为某个class增加一个subclass,必须也为另一个class...消除这种重复性的一般策略是:让一个继承体系的实体(instance)指涉

    Parallel Inheritance Hierarchies其实是shotgun surgery的特殊情况。在这种情况下,每当你为某个class增加一个subclass,必须也为另一个class相应增加一个subclass。如果你发现某个继承体系的名称前缀和另一个继承体系的名称前缀完全相同,便是闻到了这种坏味道。

    消除这种重复性的一般策略是:让一个继承体系的实体(instance)指涉(参考、引用、refer to)另一个继承体系的实体(instances)。如果再接再厉运用Move Method(搬移函数) 和 Move Field(搬移值域),就可以将指涉端( referring class )的继承体系消弭于无形。

    展开全文
  • 主要讲述了信号完整性和物理设计概论,带宽、电感和特性阻抗的实质含义,电阻、电容、电感和阻抗的相关分析,解决信号完整性问题的四个实用技术手段,物理互连设计对信号完整性的影响,数学推导背后隐藏的解决方案,...
  • 主要讲述了信号完整性和物理设计概论,带宽、电感和特性阻抗的实质含义,电阻、电容、电感和阻抗的相关分析,解决信号完整性问题的四个实用技术手段,物理互连设计对信号完整性的影响,数学推导背后隐藏的解决方案,...
  • 仪器简介仪器型号: 流变仪品 牌:安东帕空气轴承MCR92流变仪具有旋转模式和振荡模式,对于敏感样品可实现高度精确测量,电动马达控制,确保测量间隙精确控制,确保测试结果的准确性和重复性,ToolmasterTM控温附件...
  • 仪器简介仪器型号: 流变仪品 牌:安东帕空气轴承MCR92流变仪具有旋转模式和振荡模式,对于敏感样品可实现高度精确测量,电动马达控制,确保测量间隙精确控制,确保测试结果的准确性和重复性,ToolmasterTM控温附件...
  • 通过改变射频信号的相位差连接方式,仿真中分别产生了重复频率为10 GHz20 GHz的三角波方波信号,通过射频信号幅度偏移直流偏置漂移验证了方案的稳定。所提方案采用了单调制器,且无需光电滤波处理,具有产生信号...
  • 地表裂隙(缝)主要为开切眼停采线永久边界裂隙、随工作面推进周期出现的平行裂缝、沿工作面间的煤柱边界裂隙。沿工作面间的煤柱边界裂隙的分布长度最大,是地表裂隙控制的主要对象。煤层群下煤层工作面来压步增大...
  • 利用光电振荡器(OEO)产生...理论上对三角波的产生原理进行分析仿真, 实验上得到了质量良好的重复频率为5 GHz的三角波正弦信号。本方案只需增加少量器件即可使OEO同时产生三角波、正弦信号, 结构简单, 具有实用
  • C# 函数

    2017-03-05 23:33:00
    在制作中项目由一个主函数若干个函数构成,函数与函数之间可以相互调用,函数之间关系是平行关系。 作用 1、提高代码的重用 就是减少重复编写程序段,把函数重复调用,减少工作量2、提高功能开发的效率 3、...
  • 算法(四)——图

    2020-11-30 03:58:54
    关于图,包括:无向图(简单连接)、有向图(连接有方向)、加权图(连接带有权值)加权有向图(连接既有方向又带有有权值)。 无向图 定义:图是由一组顶点一组能够将两个顶点相连的边组成的。 自环:即...
  • 复杂美 Chain33 是平行链架构,数据的存证还是在一条主链上,平行链相当于做了分片的处理,它跨链的安全性和效率更高。相比较下以太坊都是独立的链进行跨链,运维成本比较高。 对于中小企业来讲,它们推动区块链发展...
  • 请问怎么进行spssLSD分析呀?数据在下面,是看什么东西才能得到结论呢?我的试验是4组,每组4个重复试验。平行做了3次。下面只是第一次做的实验数据进行...胸肌1 平方 df 均方 F 显著组间 .003 3 .001 1.555 ...
  • 介绍了自行开发的移相式数字波面干涉仪的原理特点,仪器主要用于激光棒材料波前畸变测试,仪器口径为30 mm,精度优于λ/20,重复性优于λ/50.仪器硬件具有四个特点:变倍、调焦、光通量控制、调整测试转换;软件包...
  • 通过与相移法(PSI)对比实验发现,该方法测量准确且重复性高。分析了两种方法各自的主要误差并量化:相移法中平板后表面反射光对前表面测量的影响;傅里叶分析法中的边界效应,离轴像差平板材料均匀性引入的测量误差。
  • 高精度光学玻璃折射率是保证光学设计成像质量的重要条件,主要由V 棱镜...通过对比实验证明了本算法的有效性,将测角精度提高到了±1",算法稳定测量重复性优于1×10-6,对提高测量光学玻璃折射率的精度有实际意义。
  • 晶体学基础

    2020-12-09 08:54:51
    2.1.1 空间点阵晶胞具有代表的基本单元(即最小平行六面体)作为点阵的组成单元,称为晶胞。将晶胞作三维的重复堆砌,就构成了空间点阵。为了便于分析研究晶体中质点的排列规律,可先将实际晶体结构看成完整...
  • 模版方法模式

    2014-03-11 20:58:00
    但继承的强制约束关系导致子类算法不能被其它平行类复用! Template模式暴露的问题也正是继承所固有的问题,Strategy模式则通过组合(委托)来达到Template模式类似的效果,其代价就是空间时间上的代价。 ...
  • 大数据大数据梯度下降随机梯度下降随机梯度下降算法算法评估随机梯度下降优化小批量梯度下降在线学习分布式计算机系统数据平行 大数据梯度下降 机器学习近阶段的进步很大一部分来自数据集算力的爆炸增长,...
  • 采用统一的数据存储策略与处理机制,利用多网络传输与基本监控终端相结合,通过严格的权限管理与良好的扩展,向各实体单位提供个性化服务,实现各级监管机构地方监管部门与煤矿生产企业之间平行直接的监管模式。
  • 提出一种基于正切关系相位调制技术的动态小角度测量方法。使用双棱镜组成干涉测量臂引导两束平行光至分束棱镜处干涉,通过提取携带被测信息的干涉信号的相位实现动态的小角度测量。由于采用位置探测器(PSD)对测量臂...
  • 关于摄动校正因子

    2020-06-05 02:51:21
    方法:使用蒙特卡罗代码EGSnrc设计四个平行板腔室(Roos,Markus,NACPAdvanced Markus)的详细模型,并将其放置在水模型中。 对于所有腔室,针对最大临床深度参考深度下的13个临床电子光谱(E0 = 6-21 MeV)...
  • s 的平行带 其中 的带称为主带其余均为旁带 S 平面上的主带与旁带将重复映射在整个 Z 平面上 ;等?线等衰减映射 ;等? 线等频率映射 ;等阻尼 线映射 ;解 S 平面实部相同而虚部相差 ?s 的整数倍的点均映射为Z平面同一点...
  • 针对手持靶标视觉坐标测量的广泛应用,提出...通过仿真实验验证了方法的正确性,实验结果表明,测头中心坐标在x、y、z方向的重复性精度分别达到0.077,0.035,0.140 mm,有效地解决了手持平面靶标测头中心现场标定的难题。

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

平行性和重复性