C#部分:

1.C#中集合有三种,数组类,ArrayList,和字典键值对类,一般也可以自定义集合,但是自定义集合的类型也只有这三类。

2.自定义集合实现三类集合的方法:前两者需要继承CollectionBase类,Array需要使用List属性,ArrayList需要使用InnerList属性,后一种,继承DictionaryBase类,使用Dictionary属性。

public class myCollect : CollectionBase
{
public void Add(int a)
{
List.Add(a);
}
public void Remove(int a)
{
List.Remove(a);
}
//实现索引器
public int this[int index]
{
get
{
return (int)List[index];
}
set
{
List[index] = value;
}
}
}

继承CollectionBase

public class myDic : DictionaryBase
{
public void Add(string key, Object value)
{
Dictionary.Add(key, value);
}
public void Remove(string key)
{
Dictionary.Remove(key);
}
//实现索引器
public string this[string key]
{
get { return (string)Dictionary[key]; }
set { Dictionary[key] = value; }
} }

继承DictionaryBase

3.自定义的集合会自动实现foreach循环迭代器,而有时我们自定义的类或类的集合需要迭代,那么我们就需要手动继承IEnumerable接口,并实现该接口中的IEnumerator接口。
   这种自己手动添加迭代器的方法比较繁杂,不容易理解,这里只列出具体步骤:

a.继承IEnumerable接口,然后类中实现 public IEnumerator GetEnumerator()方法

b.实现继承了IEnumberator接口的迭代类,类中实现public bool MoveNext方法和public object Current属性

c. 完成迭代器后,使用时通过判断MoveNext方法的返回值,确定是否迭代,并用Current属性保存当前被迭代到对象的引用

d.反复c步骤的过程,直到MoveNext返回false,迭代结束。

4.yield return迭代器的出现简化了手动继承IEnumerable接口的繁琐性,使用比较简单。

 class  user
{
public string name;
public int key;
public string Name
{
get { return this.name; }
set { this.name = value; }
}
public int Key
{
get { return this.key; }
set { this.key = value; }
}
public IEnumerable foo()
{
yield return this.name;
yield return this.key;
}
}
class test
{
public static void Main(String[] args)
{
user us=new user();
us.Name="jack";
us.Key=;
foreach (var item in us.foo())
{
Console.WriteLine(item);
}
Console.ReadKey();
}
}

yield return

5.C#的对象复制也分为深度复制和浅度复制,浅度复制需在类的方法中调用MemberwiseClone函数实现。深度方法则和JavaScript类似,也是用new相同类型对象并迭代赋值实现。
6.C#可以对某些运算符进行重载,比如下面的案例:

public class person
{
public int age;
public int Age
{
get { return this.age; }
set { this.age = value; }
}
public static person operator +(person a, person b)
{ person c = new person();
c.age = a.age + b.age;
return c;
}
} class test
{ public static void Main(String[] args)
{
var a = new person();
var b = new person();
a.age = ;
b.age = ;
var c = new person();
c = a + b;
Console.WriteLine(c.Age);
Console.ReadKey();
}
}

运算符重载

运算符重载事项:
  比较运算符的重载需要 成对重载,同时重载==和!=时,需要重写该类的Equals方法和GetHashCode方法。其中GetHashCode方法返回的是int类型的8位数字编码,表示该类的唯一性。

7.IComparable接口和IComparer接口负责实现对象之间的比较,前者是obj1.ComparaTo(obj2)方法的借口,后者是object.Compare(object a,object b)方法的载体。

8.每次重写ICmparable接口时都要重写== <= >= <> !=这些运算符。同样,每次重写== 都要重写Equals方法,重写Equals方法时也要重写GetHashCode方法。这些都是连锁反应。为什么重写Equals需要重写GetHashCode方法?因为每个对象的散列码即哈希编码都是唯一的,两个对象如果相等,那么这两个对象的散列码必须相同,所以,有必要维护这个协定。注意:相等的对象有相同的散列码,反之则不成立。因为散列码实质就是该对象在内存中的地址,所以谁知道你下次程序运行你的对象分配的地址是什么呢?

9.C#中==表示值类型的值是否相等和引用类型的引用地址是否相等。而Equals则表示两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

java部分:

1.java中集合通过Collection接口和Map接口来派生,前者表示线性序列,后者是键值到值的映射。

2.Collection分为Set和List,Set表示不重复的元素集合,List表示一个可包含重复元素的有序集合。

3.Set还可以派生出SortedSet,表示可排序的集合。

4.Map也可以派生出SortedMap,表示可排序的映射。

C#&Java重学笔记(集合比较和转换)的更多相关文章

  1. C#&java重学笔记(面向对象)

    C#部分 1.C#有一个internal关键字,指字段可以同一个程序集中访问,出了程序集不行.还有一个protected internal(没有先后之分)修饰词,指只能在同一个程序集中的子类访问 2. ...

  2. C#&java重学笔记(变量与操作符)

    声明:自用参看读物 C#部分 1.C#中的byte和sbyte并不是二进制的比特,而是无符号 和 有符号的 8位整数. 2.decimal和float double都用来表示小数,前者用e的10的几次 ...

  3. C#&java重学笔记(泛型)

    C#部分: 1.泛型的出现主要用于解决类.接口.委托.方法的通用性,通过定义泛型类.接口.委托.方法,可以让不同类型的数据使用相同运算规则处理数据,方便了开发. 2.利用System.Nullable ...

  4. C#&java重学笔记(函数)

    C#部分  1.写在函数定义的()中的关键字: a.params关键字:用来满足函数的参数为数组时,而数组的长度不固定的情况.且该关键字只能用来修饰数组型参数.这样一修饰,就达成了类似JavaScri ...

  5. Java IO学习笔记(三)转换流、数据流、字节数组流

    转换流 1.转换流:将字节流转换成字符流,转换之后就可以一个字符一个字符的往程序写内容了,并且可以调用字符节点流的write(String s)方法,还可以在外面套用BufferedReader()和 ...

  6. Java集合类简单总结(重学)

    java集合类简介(重学) 一.Collection(集合).Map接口两者应该是平行关系吧. 1.Map介绍 Map是以键值(key-value)对来存放的,2个值.通过key来找到value(例: ...

  7. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...

  8. 重学 Java 设计模式:实战迭代器模式「模拟公司组织架构树结构关系,深度迭代遍历人员信息输出场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 相信相信的力量! 从懵懂的少年,到拿起键盘,可以写一个Hell ...

  9. <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合

    一.前言                                                                                       几个月前的看书笔记 ...

随机推荐

  1. python 序列的方法

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在快速教程中,我们了解了最基本的序列(sequence).回忆一下,序列包含有定值 ...

  2. python3.3中使用tornado.options.parse_config_file的时候,在windows下conf为utf-8时,报错的问题

    由于我的windows7下的默认编码是gbk 在调用tornado.options.parse_config_file时,内部代码为 with open(path) as f: exec_in(f.r ...

  3. jquery的prop()和attr()

    jQuery1.6以后prop()和attr()的应用场景如下: 第一原则:只添加属性名称该属性就会立即生效应该使用prop(); 第二原则:只存在true/false的属性应该使用prop(); 设 ...

  4. android开发系列之由ContentValues看到的

    这本篇博客里面我想重点来分析一下ContentValues的源码以及它里面涉及到的继承接口Parcelabel,还有HashMap的源码. 相信使用过android里面数据库操作的朋友对于Conten ...

  5. iOS学习之UIControl

    一.UIControl初识      1.UIControl是有控制功能的视图(比如UIButton.UISlider.UISegmentedControl等)的父类. 只要跟控制有关的控件都是继承于 ...

  6. iOS8 超简单的设置圆角按钮 ImageView等UIView

    button.layer.cornerRadius = // 这个值根据你想要的效果可以更改 button.clipsToBounds = true 这种方法不止可以设置按钮,UIView应该都可以设 ...

  7. 跨域访问-需要设置HTTP响应标头设置

    跨域访问-需要设置HTTP响应标头设置 前提:服务端网站的配置(被请求的网站) 1.需要在IIS服务器站点的功能视图中设置HTTP响应标头: 2.双击“HTTP响应标头”进入设置界面 3.点击右侧添加 ...

  8. My First Django Project (3) - Apache set up

    Holy moly!!!!因为漏了一下斜杠,害我反复调试了2,3天,无法读取static 文件,一直找不出原因,后来在apache的error.log中发现了原因. 1. 下载了apache 2.4, ...

  9. Mono for Android (3)-- AbsoluteLayout、FrameLayout、LinearLayout、RelativeLayout、TableLayout

    AbsoluteLayout:允许开发人员将视图放在所定义的位置.该布局已经过时了,建议改用其他 FrameLayout:最简单的布局选项,其设计目的是在屏幕上显示单个对象.所有元素都固定在左上角.如 ...

  10. js event bubble and capturing

    Bubble: pppppp Capturing pppppp Mix pppppp To Stop Bubble pppppp // JS Bin