编程小虾米大侠之梦 软件环境:win7 开发工具:vs 2010 平台:.NET 语言:C# 类库版本:.NET Framework 2.0 语言特点:强类型语言

规划知识点: 1、.net framework结构图    CLR:公共语言规范,MSIL:计算机中间语言    F5 → 开发工具编译(基类库、公共语言进行时) → MSIL → cpu(二进制) → MSIL →    操作系统 → 效果

2、命名空间:namespace    使用:using    命名控件存在嵌套,.可以嵌套访问下一级的命名空间 例如using system.collections.giney;

3、变量:访问修饰符    数据类型    标识符($_a-z) =  值           public        int         a            = 1;           a = 100;           private       string      _a           = "a"    protected     bool        a1           = true / false       internal                  1a(X)        = X    常量:const public int abc =100;

4、基本数据类型:值类型        引用类型               存储到栈        放到内存堆               存储的值        存储的值对应的地址               存储快空间大     读取慢,空间小

5、装箱:值类型转换成引用类型    拆箱:引用类型转换为值类型

6、逻辑语句块:    if(条件){执行结果}else {执行结果}    if(T) {JG} else if(T) .....else{}    if(T) {} if(T) {} ......    switch(T){ case 1: jg1 break; case 2: jg2 break;.....default: jg break;}

7、循环结构    while(条件){循环体}    do{循环体} while(条件);    for(初始化变量;条件;增量){循环体}  //循环 根据循环条件    foreach(最小单位变为 变量名 in 集合或数组){循环体} //遍历 所有都拿出来

8、数组(三种定义方式) :数据类型 [] 数组名 ;    int [] num1 = new int[5];   num1[0] = 100;    int a = num1[0];    int [] num2 = {1,4,3,6,8,9};  同上    int [] num3 = new int[5]{3,5,7,98,3,0};  同上

9、结构:    访问修饰符  struct 机构名{ 属性、行为}    例: public  struct abc{ public int a ; public void meth(){}}

10、枚举:    访问修饰符 enum 枚举名 { 值列表}    利:public enum en { 100,200,300}    en.100;

11、OOP :面向对象的编程    对象:万物皆对象    类:属性和行为封装起来的    关系:类是对象的具体实现, 对象是类的抽象描述    OOP特质:封装、继承、多态

12、构造函数和析构函数    构造作用:初始化对象 方法名与类名相同 ,没有返回类型        概念:重载(方法名相同参数列表不同【一个类中】)        例:public void a(){} ,  public void a(int b){}    析构作用:销毁对象

13、方法    定义  访问修饰符  返回类型 方法名(参数列表){方法体}    例:  private int  meth(int a ,int b){return a + b;}          public string meth2(string a ,string b){ return "111";}          public void meth3(){}    调用:同类中,,,直接方法名(参数);          不同类,,,实例化所在类 new  类名.方法名(参数);

14、封装:    概念:把尽可能多的封装起来,把所有属性封装     特点:安全性高,把属性隐藏    语法:private string age;          public string Age          {              get { return age; }              set { age = value; }          }

15、继承     方式:隐式继承、显示继承             :        base(继承父类中构造函数)     语法:子类:父类 (继承父类中的所有非私有成员)     特性:传递、单根、重用

16、重写、new隐藏     重写:override (重写、虚方法virtual ,抽象方法abstract ,已被重写过的方法)     new :三种用法           1》实例化类   类名  名 = new 类名();    2》申请数据或集合:  int [] a = new int[5];      3》隐藏继承成员  :  a:b b.meth();   a→ new public void meth(){}

17、抽象类 、抽象方法  abstract     语法:abstract class  名{}     定义:不能被实例化,必须有普通类继承并实现 ,包含抽象方法,可以包含普通方法           抽象方法必须写到抽象类中     应用:非真是对象,在程序中描述虚拟或构想出来的对象,

18、接口:interface     语法:interface I名 {}     定义:不能有访问修饰符,不能有方法体           只能由普通类继承并实现  ,,接口允许多继承

19、接口、抽象类异同     接口与抽象类的区别:                     抽象类                        接口   用abstract定义               用interface定义                 只能继承一个类               可以实现多个接口   非抽象派生类必须实现抽象方法          实现接口的类必须实现所有成员 不同点     需要override实现抽象方法                   直接实现

不能被实例化 相同点  包含为实现的方法  派生类(子类)必须实现未实现的方法

=======================================================================================

[Array和ArrayList的区别]: #1.Array的用法与数组几乎一样,可以看做是数组。在定义的时候需要指定长度;ArrayList的用法与普通集合一样,定义的时候不需要指定长度;

#2. Array只能存储同构的对象,而ArrayList可以存储异构的对象。 同构的对象是指类型相同的对象,若声明为int[]的数组就只能存放整形数据,string[]只能存放字符型数据,但声明为object[]的数组除外。 而ArrayList可以存放任何不同类型的数据(因为它里面存放的都是被装箱了的Object型对象,实际上ArrayList内部就是使用"object[] _items;"这样一个私有字段来封装对象的)

#3 在CLR托管对中的存放方式 Array是始终是连续存放的,而ArrayList的存放不一定连续。

#4 初始化大小 Array对象的初始化必须只定指定大小,且创建后的数组大小是固定的, 而ArrayList的大小可以动态指定,其大小可以在初始化时指定,也可以不指定,也就是说该对象的空间可以任意增加。

#5 Array不能够随意添加和删除其中的项,而ArrayList可以在任意位置插入和删除项。

[Array和ArrayList的相似点]

#1 都具有索引(index),即可以通过index来直接获取和修改任意项。 #2 他们所创建的对象都放在托管堆中。 #3 都能够对自身进行枚举(因为都实现了IEnumerable接口)。 ============================================================================== hashtable与Arraylist的区别: hash键值映射,简单说键对应值,我们认给每值都起名字,键所谓名字,我们通过名字来寻找值,而arraylist集合,线性结构存储数据,集合存储内容都值,并且我们给每值用索引做编号,所遍历过程我们用索引,arraylist有序,而hash无序

============================================================================== 在面试的时候,如果面试官问道集合,这两个大师绝对是少不了的,当然这个也是看你对基础的掌握是否透彻

一:选手介绍:

面试官让你说说他们二者的区别其实就是让你介绍一把而已

1:Hashtable继承自Dictionary类,而HashMap是Map接口的一个实现。这里要说明一下Dictionary类是jdk1.0中就有的,而Map接口是1.2之后才有的,当然与此同时Hashtable也实现了Map接口。

2:最重要的区别:Hashtable是线程安全的,而HashMap是线程不安全的。也就是说当我们的应用处于多个线程访问时,Hashtable是安全的,而HashMap要实现同步则要通过额外的同步机制:一般Collections的一个静态方法得到解决:Map m = Collections.synchronizedMap(new HashMap(...));这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。

3:HashMap可以用null做为键(当然只能有一个),还可以有多个null的值,而Hashtable不可以存在null的键值。

当需要判断是否存在某个键映射一个值时:HashMap去掉了Hashtable的contains(Object value)方法,保留了containsValue(Object value)和containsKey(Object key)方法,因为contains和containsValue方法确实太像。

注:

get(Object key) 返回与指定键关联的值;

containsKey(Object key) 如果Map包含指定键的隐射,则返回true;

containsValue(Object value) 如果Map将一个或多个键隐射到指定值,则返回true;

isEmpty()如果Map不包含键-值隐射,则返回true;

二:优缺点比较:

这个说透彻很重要

Hashtable与hashmap 比较

1:效率:由于Hashtabe是线程安全的,当大量的并发访问的时候,速度肯定要比HashMap慢的多,当然这个的前提是:我们的程序不需要保证线程安全(同步)。

也就是说在不需要保证线程同步的情况下:我们应该选择Hashmap。

大多数的应用是需要保证线程安全的:这个时候好像Hashtable先天有优势,但HashMap使用上面(区别:2)的方法一样可以保证线程安全,在这种情况下天才和后天努力者的对决好像势均力敌,难分高下,两者都可以选择。

2:空间:Hashtable的初始容量为11,而HashMap初始化容量为16.并且他们的加载因子默认都为0.75。前者的增加方式是 old*2+1;后者为old*2;也就是说当Hashtable中存在8个键值时,它的容量会自动增加到23.而HashMap中存在12个键值时,它会增加容量到32。

这样看来,一个是基数小增加快,一个是基数大增加慢。两者都可以选择。

3:官方建议:Sun的jdk不断更新,很多的类与方法不断的被重写和淘汰,显然后生的要比早生的先进,所以java官方还是支持HashMap的。像Dictionary也早已注明“已过时,建议使用Map接口”。当然Hashtable线程同步的优点还是比较突出的(例如属性文件),觉类似于HashMap的一个子类。

三:最后建议:

最后给出自己的结论

HashMap在与Hashtable的较量中胜出

C#高级二的更多相关文章

  1. 【如何让代码变“高级”(二)】-这样操作值得一波666(Java Stream)(这么有趣)

    [如何让代码变“高级”(二)]-这样操作值得一波666(Java Stream)(这么有趣) 开发中的代码 在开发中的代码是不是很常见这样的代码: 这样的? for循环取元素取值 List<Us ...

  2. Java基础高级二(多线程)

    1.进程和线程的区别:线程是轻量级的,本省不会持太多资源,需要的时候向进程申请 2.线程的状态:创建,可执行,执行中,等待,休眠,阻塞 3.线程状态之间的转换 4.线程API:Thread类,Runn ...

  3. Python面向对象--高级(二)

    ## 使用__slots__限制类的属性 - 之前说到,可以通过在类外部实例或者类名任意定义实例属性或者类属性或者方法 class Person(object): pass Person.name = ...

  4. JQuery高级(二)

    3. 事件绑定 1. jquery标准的绑定方式 * jq对象.事件方法(回调函数): * 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为. * 表单对象.submit();//让表单提 ...

  5. MySQL数据库高级二:索引优化

    索引优化非常的重要 1.预热 java开发 DBA培训很少,需要经验磨练 索引优化的效果非常好 左外连接 MySQL没有全连接 7种join一定要会写 具体见武林的例子 union的字段顺序要相同 6 ...

  6. C++ 高级语法学习与总结(代码实例)

     C++11增加了许多的特性,auto就是一个很明显的例子.  还有就是typedid()获取数据变量的类型 看下面简短的代码: atuo: 很像java中的加强for循环..... //获取一个数据 ...

  7. PCI GXL学习之二次开发篇

    作者:朱金灿 来源:http://blog.csdn.net/clever101 gxl的二次开发分初级和高级之分.初级是gxl提供了几百个模块供你编排成不同的作业.高级就是你可以编写你的算法模块,然 ...

  8. web前端书籍

    前端开发 必看的书籍资料(转自CSDN郭小北V5) 一. html + css 这部分建议在 w3school 在线教程 上学习,边学边练,每个属性后还有在线测试. 然后过一遍之后可以模仿一些网站做些 ...

  9. PHP常用函数备用

    刚学习php的时候,我也为记忆php函数苦恼不已.认为干嘛记忆这么枯燥无味的东西呢?用的时候查一下手册不就行了吗?但是当时因为身在辅导机构,还是记忆了一大堆自己并不感兴趣的函数. 由此就想起来,小的时 ...

随机推荐

  1. jxl 处理 Excel 样式

    jxl 能够操作的 excel 样式: 1. Workbook的格式设置(代表一个excel文件) 2. Sheet的格式设置(代表一个表格) 3. Cell的格式设置(代表一个单元格) PS:此jx ...

  2. 解决SQL server 2014 修改表中的字段,无法保存的问题。

    修改PROJECT表中的字段,保存时,弹出上面的窗体,无法保存. 解决方法为:[工具]->[选项]->[设计器]中,去掉“阻止保存要求重新创建表的更改”前的勾选.

  3. sql server操作类(本人自己写的)

    package com.mytest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepa ...

  4. poj3728

    [描述] 有 N 城 市在一个国家,有一个且只有一个简单的路径每一对城市之间. 一个商人选择了一些路径和想赚尽可能多的钱在每个路径. 当他沿着一条路径,可以选择一个城市购买一些商品和出售他们在一个城市 ...

  5. 阿里云安装Tomcat

    1.Apache官方网站下载Tomcat http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.35/bin/apache-tomcat-8.0 ...

  6. 【NHibernate】列“ReservedWord”不属于表 ReservedWords

    NHibernate+FluentNHibernate+MySql 运行时黄页显示下边的异常,项目中找了半天没出现过这个列的关键字. [ArgumentException: 列“ReservedWor ...

  7. 微信分享接口SDK简介使用

    很久没做移动端活动了,想不少人都参与过微信里面的活动,既然活动就少不了分享.那我就行一个前端的角度说说如何实现微信分享的吧. 对应微信分享,现在已有公共接口,微信的开发者文档SDK:https://m ...

  8. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

  9. poi解析excel 03、07

    maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</a ...

  10. python安装MySQLdb模块

    以Ubuntu下安装为例: 下载地址:https://pypi.python.org/pypi/MySQL-python/ 解压后直接进入解压目录运行安装命令. python setup.py ins ...