如何学好java

如何学好java,其实很简单,只要用心体会,慢慢积累!
posts - 106, comments - 7, trackbacks - 0, articles - 3
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

2012年11月21日

http://www.luocong.com/dsaanotes/index-Z-H-1.htm

posted @ 2014-01-02 22:50 哈希 阅读(132) | 评论 (0)编辑 收藏

     摘要: 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。   冒泡排序算法的运作如下:  比较相邻的元素。如果第一个比第二个大,就交换他们...  阅读全文

posted @ 2014-01-02 22:32 哈希 阅读(189) | 评论 (0)编辑 收藏

http://www.cnblogs.com/szfei/archive/2012/08/08/2628208.html    hashmap遍历

posted @ 2012-12-22 10:45 哈希 阅读(152) | 评论 (0)编辑 收藏

基本介绍:
          showModalDialog()         (IE 4+ 支持)
          showModelessDialog()      (IE 5+ 支持)
          window.showModalDialog()                  方法用来创建一个显示HTML内容的模态对话框。
          window.showModelessDialog()             方法用来创建一个显示HTML内容的非模态对话框。
使用方法:
          vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures])
          vReturnValue = window.showModelessDialog(sURL [, vArguments] [,sFeatures])
参数说明:
         sURL          --  必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
         vArguments    -- 可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过
 

                          window.dialogArguments来取得传递进来的参数。
         sFeatures     -- 可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
----------------
1.    dialogHeight:    对话框高度,不小于100px
2.    dialogWidth:    对话框宽度。
3.    dialogLeft:     离屏幕左的距离。
4.    dialogTop:     离屏幕上的距离。
5.    center:          { yes | no | 1 | 0 } :              是否居中,默认yes,但仍可以指定高度和宽度。
6.    help:             {yes | no | 1 | 0 }:                是否显示帮助按钮,默认yes。
7.    resizable:       {yes | no | 1 | 0 } [IE5+]:     是否可被改变大小。默认no。
8.    status:          {yes | no | 1 | 0 } [IE5+]:      是否显示状态栏。默认为yes[ Modeless]或no[Modal]。
9.    scroll:            { yes | no | 1 | 0 | on | off }:是否显示滚动条。默认为yes。

下面几个属性是用在HTA中的,在一般的网页中一般不使用。
10.    dialogHide:{ yes | no | 1 | 0 | on | off }:在
打印或者打印预览时对话框是否隐藏。默认为no。
11.    edge:{ sunken | raised }:指明对话框的边框样式。默认为raised。
12.    unadorned:{ yes | no | 1 | 0 | on | off }:默认为no。

参数传递:
1. 要想对话框传递参数,是通过vArguments来进行传递的。类型不限制,对于字符串类型,最大为4096个字符。也可以传递对象,例如:
-------------------------------
parent.htm
<script>
          var obj = new Object();
          obj.name="51js";
          window.showModalDialog("modal.htm",obj,"dialogWidth=200px;dialogHeight=100px");
</script>
modal.htm
<script>
          var obj = window.dialogArguments
          alert("您传递的参数为:" + obj.name)
</script>
-------------------------------
2.可以通过window.returnValue向打开对话框的窗口返回信息,当然也可以是对象。例如:
------------------------------
parent.htm
<script>
          str =window.showModalDialog("modal.htm",,"dialogWidth=200px;dialogHeight=100px");
          alert(str);
</script>
modal.htm
<script>
          window.returnValue="http://homepage.yesky.com";
</script>

常见技巧:

一、怎样才让在showModalDialog和showModelessDialog的超连接不弹出新窗口?
  在被打开的网页里加上<base target="_self">就可以了。这句话一般是放在<head>之间的。

二、怎样才刷新showModalDialog和showModelessDialog里的内容?
  在showModalDialog和showModelessDialog里是不能按F5刷新的,又不能弹出菜单。这个只能依靠

javascript了,以下是相关代码:

<body onkeydown="if (event.keyCode==116){reload.click()}">
<a id="reload" href="filename.htm" style="display:none">reload...</a>

  将filename.htm替换成网页的名字然后将它放到你打开的网页里,按F5就可以刷新了,注意,这个要

配合<base target="_self">使用,不然你按下F5会弹出新窗口的。

三、如何用javascript关掉showModalDialog(或showModelessDialog)打开的窗口。
  <input type="button" value="关闭" onclick="window.close()">
  也要配合<base target="_self">,不然会打开一个新的IE窗口,然后再关掉的。

四、Math.random与showModalDialog。

   当你设置的弹出网页固定时(如上面的"modal.htm"页面),ie很可能到临时文件区,下载上次产生的该页面(openPage.html),而没有重新加载,

   对于动态加载的页面来说,这样往往产生误会,如没有及时更新数据,也就更不利于开发者测试。所以,你可以采用如下方式:

      var strPage = “/medal.htm?random="+Math.random();

   这样每次产生的strPage是不一样的,原因也就不言自明了。

 

下面举两个例子

一、返回一个字符串

首先是父页面有个按钮,用来打开Modal页面userList.aspx

复制代码
 function openWin()
    {
         str =window.showModalDialog("userList.aspx",window,"status:0;help:0;edge:sunken;dialogWidth=700px;dialogHeight=400px");

        if(str!=undefined && typeof(str)!=undefined && str!="undefined" && str!="")
        {
          document.getElementById("txtuserid").value=str;
        }else
        {
         document.getElementById("txtuserid").value="";
        }
    }
复制代码

str就是子页面返回过来的数据,我们把它添加到父类的一个表单元素中

子页面

    function getValue()
        {          
         var selectValue=$(":radio:checked").val();
         window.returnValue=selectValue;
         window.close();
        }

在这里我们把子页面里的值返回到父页面里就可以了,然后关闭页面就可以了

二、返回一个数据

父页面

复制代码
     function openWin()
     {
 
        array =window.showModalDialog("demo2.aspx",window,"status:0;help:0;edge:sunken;dialogWidth=700px;dialogHeight=400px;scroll:no");
       
          document.getElementById("username").value=array[0];
          document.getElementById("sex").value=array[0];
         
     
    }
复制代码

子页面

 

复制代码
   function getValue()
       {
         var array=new Array();
         
         array[0]=document.getElementById("username").value;
         Array[1]=document.getElementById("sex").value;
         window.returnValue=array;
         window.close();
       }
复制代码

返回一个数组就可以了,如果用open打开的话,在搜狗或者360浏览器打开的是一个页面或者阻拦什么的

 前段时间在后台使用JS的winodw.showModalDialog来查看静态页面内容,发现不能及时显示更新后的页面内容,用open打开有时也会出现这种问题

解决办法 
  window.showModalDialog(getUrl+"?Rnd="+Math.random(),"","dialogWidth:600px;dialogHeight:400px;help:no;scroll:yes;center:yes;status:no;");
这样就不会有缓存了

多思考,多创新,才是正道!

posted @ 2012-11-26 12:51 哈希 阅读(904) | 评论 (1)编辑 收藏

1.判断select选项中 是否存在Value="paraValue"的Item 
$("#selectid option[@value='paraValue']").length>0
2.向select选项中 加入一个Item 
$("#selectid").append("<option value=''>1111<option>");
3.从select选项中 删除一个Item 
$("#selectid").remove("<option value=''>1111<option>");
4.修改select选项中 value="paraValue"的text为"paraText" 
$("#selectid option:selected").attr("value","paraValue").attr("text","paraText");
5. 设置select中text="paraText"的第一个Item为选中 
$("#selectid option[@text='paraText']").attr("selected","true")
6.设置select中 value="paraValue"的Item为选中 
$("#selectid option[@value='paraValue']").attr("selected","true")

7.设置select中第一 个Item为选中 
$("#selectid option").eq(0).attr('selected', 'true');

8. 得到select的当前选中项的value 
$("#selectid").val();
9.得到select的当前选中项的text 
$("#selectid").text();
10. 得到select的当前选中项的Index 
document.getElementById("select1").selectedIndex;
$("#selectid").get(0).selectedIndex
11. 清空select的项
$("#selectid").empty();

JS版本的:

  • //1.判断select选项中 是否存在Value="paraValue"的Item   
  • function jsSelectIsExitItem(objSelect,objItemValue)   
  • {   
  •      var isExit = false ;   
  •      for ( var i=0;i;I++)   
  •      {   
  •          if (objSelect.options[i].value == objItemValue)   
  •          {   
  •              isExit = true ;   
  •              break ;   
  •          }   
  •      }        
  •      return isExit;   
  • }   
  •   
  • //2.向select选项中 加入一个Item   
  • function jsAddItemToSelect(objSelect,objItemText,objItemValue, objItemPos)   
  • {   
  •      //判断是否存在   
  •      if (jsSelectIsExitItem(objSelect,objItemValue))   
  •      {   
  •          alert( "该Item的 Value值已经存在" );   
  •      }   
  •      else   
  •      {   
  •          var varItem = new Option(objItemText,objItemValue);   
  • //       objSelect.options[objSelect.options.length] = varItem;   
  •          objSelect.options.add(varItem, objItemPos);   
  •          alert( "成功加入" );   
  •      }      
  • }   
  •   
  • //3.从select选项中 删除一个Item   
  • function jsRemoveItemFromSelect(objSelect,objItemValue)   
  • {   
  •      //判断是否存在   
  •      if (jsSelectIsExitItem(objSelect,objItemValue))   
  •      {   
  •          for ( var i=0;i;I++)   
  •          {   
  •              if (objSelect.options[i].value == objItemValue)   
  •              {   
  •                  objSelect.options.remove(i);   
  •                  break ;   
  •              }   
  •          }          
  •          alert( "成功删除" );              
  •      }   
  •      else   
  •      {   
  •          alert( "该 select中 不存在该项" );   
  •      }      
  • }   
  •   
  • //4.修改select选项中 value="paraValue"的text为"paraText"   
  • function jsUpdateItemToSelect(objSelect,objItemText,objItemValue)   
  • {   
  •      //判断是否存在   
  •      if (jsSelectIsExitItem(objSelect,objItemValue))   
  •      {   
  •          for ( var i=0;i;I++)   
  •          {   
  •              if (objSelect.options[i].value == objItemValue)   
  •              {   
  •                  objSelect.options[i].text = objItemText;   
  •                  break ;   
  •              }   
  •          }          
  •          alert( "成功修改" );              
  •      }   
  •      else   
  •      {   
  •          alert( "该 select中 不存在该项" );   
  •      }      
  • }   
  •           
  • //5.设置select中text="paraText"的第一个 Item为选中   
  • function jsSelectItemByValue(objSelect,objItemText)   
  • {      
  •      //判断是否存在   
  •      var isExit = false ;   
  •      for ( var i=0;i;I++)   
  •      {   
  •          if (objSelect.options[i].text == objItemText)   
  •          {   
  •              objSelect.options[i].selected = true ;   
  •              isExit = true ;   
  •              break ;   
  •          }   
  •      }        
  •      //Show出结果   
  •      if (isExit)   
  •      {   
  •          alert( "成功选中" );              
  •      }   
  •      else   
  •      {   
  •          alert( "该 select中 不存在该项" );   
  •      }      
  • }   
  •   
  • //6.设置select中value="paraValue"的Item 为选中   
  • document.all.objSelect.value = objItemValue;   
  •   
  • //7.得到select的当前选中项的value   
  • var currSelectValue = document.all.objSelect.value;   
  •   
  • //8.得到select的当前选中项的text   
  • var currSelectText = document.all.objSelect.options[document.all.objSelect.selectedIndex].text;   
  •   
  • //9.得到select的当前选中项的Index   
  • var currSelectIndex = document.all.objSelect.selectedIndex;   
  •   
  • //10.清空select的项   
  • document.all.objSelect.options.length = 0;  
  • posted @ 2012-11-26 12:46 哈希 阅读(230) | 评论 (0)编辑 收藏

    封装 继承 多态

    面向对象的三个基本特征是:封装、继承、多态。

     

    封装

    封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

    继承

    面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

    通过继承创建的新类称为“子类”或“派生类”。

    被继承的类称为“基类”、“父类”或“超类”。

    继承的过程,就是从一般到特殊的过程。

    要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。

    在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。

    继承概念的实现方式有三类:实现继承、接口继承和可视继承。

    Ø 实现继承是指使用基类的属性和方法而无需额外编码的能力;

    Ø 接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

    Ø 可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

    在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

    抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。

    OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

    多态

    多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

    实现多态,有二种方式,覆盖,重载。

    覆盖,是指子类重新定义父类的虚函数的做法。

    重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

    其实,重载的概念并不属于“面向对象编程”,重载的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的)。如,有两个同名函数:function func(p:integer):integer;和function func(p:string):integer;。那么编译器做过修饰后的函数名称可能是这样的:int_func、str_func。对于这两个函数的调用,在编译器间就已经确定了,是静态的(记住:是静态)。也就是说,它们的地址在编译期就绑定了(早绑定),因此,重载和多态无关!真正和多态相关的是 “覆盖”。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态(记住:是动态!)的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚邦定)。结论就是:重载只是一种语言特性,与多态无关,与面向对象也无关!引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚邦定,它就不是多态。”

    那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

    泛化(Generalization)

     

    在上图中,空心的三角表示继承关系(类继承),在UML的术语中,这种关系被称为泛化(Generalization)。Person(人)是基类,Teacher(教师)、Student(学生)、Guest(来宾)是子类。

    若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都有意义,则允许B继承A的功能和属性。

    例如,教师是人,Teacher 是Person的“一种”(a kind of )。那么类Teacher可以从类Person派生(继承)。

    如果A是基类,B是A的派生类,那么B将继承A的数据和函数。

    如果类A和类B毫不相关,不可以为了使B的功能更多些而让B继承A的功能和属性。

    若在逻辑上B是A的“一种”(a kind of ),则允许B继承A的功能和属性。

    聚合(组合)

     

    若在逻辑上A是B的“一部分”(a part of),则不允许B从A派生,而是要用A和其它东西组合出B。

    例如,眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,所以类Head应该由类Eye、Nose、Mouth、Ear组合而成,不是派生(继承)而成。

    聚合的类型分为无、共享(聚合)、复合(组合)三类。

    聚合(aggregation)

     

    上面图中,有一个菱形(空心)表示聚合(aggregation)(聚合类型为共享),聚合的意义表示has-a关系。聚合是一种相对松散的关系,聚合类B不需要对被聚合的类A负责。

    组合(composition)

     

    这幅图与上面的唯一区别是菱形为实心的,它代表了一种更为坚固的关系——组合(composition)(聚合类型为复合)。组合表示的关系也是has-a,不过在这里,A的生命期受B控制。即A会随着B的创建而创建,随B的消亡而消亡。

    依赖(Dependency)

     

    这里B与A的关系只是一种依赖(Dependency)关系,这种关系表明,如果类A被修改,那么类B会受到影响

    posted @ 2012-11-21 09:32 哈希 阅读(215) | 评论 (0)编辑 收藏