泛型

泛型与非泛型的区别及详细解释

坚强是说给别人听的谎言 提交于 2020-01-27 18:49:30
使用集合组织相关数据 1:简介 我们都知道数组是一组具有相同数据类型的数据的集合,在程序中可以存储数据,但是数组有一个缺点,即当其中的元素初始化后,要在程序中动态的给数组添加,或删除某个元素是很困难的。那么如何解决这个问题?.NET给我们提供了各种集合对象,如ArrayList和Hashtable。它们都可以很好的进行元素的动态添加,删除等操作。此外还要介绍C#中的一个重要概念——泛型。 2:ArrayList 1:ArrayList非常类似于数组,也有人称它为数组列表,ArrayList是一个可动态维护的集合。数组的容量是固定的,而ArrayList的容量是可以根据需要自动扩充,它的索引会根据程序的扩展而重新进行分配和调整。ArrayList提供了一系列的方法对其中的元素,进行访问增加,删除的操作。 2:和数组类似,ArrayList中存储的数据称为元素;ArrayList可以保存的元素就是ArrayList的容量,其默认初始容量为0;可以通过索引访问ArrayList中的元素,索引从0开始。 3:ArrayList类属于System.Collections命名空间,这个命名空间包含接口和类,这些接口和类定义各种对象(如列表,队列,位数组,哈希表和字典)的集合,ArrayList就属于集合中的一种,因此在使用ArrayList类之前一定要引入System

ArrayList集合

你说的曾经没有我的故事 提交于 2020-01-27 17:45:29
ArrayList 类 数组的长度不可以发生改变 但是ArrayList集合的长度是可以随意变化的 对于 ArrayList 来说,有一个尖括号 <E>代表泛型 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。 注意: 泛型只能是引用类型,不能是基本类型 注意事项: 对于 ArrayList集合 来说, 直接打印得到的不是地址值,而是内容 如果内容是空,得到的是空的中括号:[ ] package cn.itcast.day07.demo04; import java.util.ArrayList; public class Demo02ArrayList { public static void main(String[] args) { // 创建了一个ArrayList集合,集合的名称是list,里面装的全都是String字符串类型的数据 // 备注:从JDK 1.7+开始,右侧的尖括号内部可以不写内容,但是<>本身还是要写的。 ArrayList<String> list = new ArrayList<>(); System.out.println(list); // [] // 向集合当中添加一些数据,需要用到add方法。 list.add("赵丽颖"); System.out.println(list); // [赵丽颖] list.add("迪丽热巴");

【Clr in c#】泛型

只愿长相守 提交于 2020-01-27 13:19:31
  使用泛型的好处是“代码重用”,极大的提高了开发效率,泛型为开发者提供了以下优势:     1,源代码保护 算法的源代码不需要提供给使用泛型算法的开发人员,使用c++模板的泛型技术需要提供。(目前c++模板的泛型技术了解较少)     2,类型安全 给泛型算法指定类型时,编译器能理解开发者意图,只有兼容类型能通过,不兼容的时候编译时候会报错。     3,更清晰的代码 由于编译器强制类型的安全性,减少源代码中必须进行的转型次数,使得代码容易维护和编写。例如:DateTime dt=dtList[0];从DateTime的集合中按照索引取出来的值可以直接赋值给DateTime类型,不需要转型。     4,更佳的性能 在操作值类型时候,非泛型集合会造成装箱、拆箱操作,会造成托管堆上的内存分配,会造成频繁的垃圾回收,影响性能。    补充: 对于泛型方法,约束父类类型,与参数直接传递父类,在没有返回值的情况下是没有区别的,假如有需要返回传入的类型,则用泛型方法比较合适,因为通过泛型方法返回的类型不需要经过类型转换 http://bbs.csdn.net/topics/380050195 1 public class AA{} 2 public class BB:AA{} 3 4 5 public void GetText<T>(T t) where T:AA 6 { 7 } 8 与

C#与Java的比较

这一生的挚爱 提交于 2020-01-27 13:19:14
这篇文章对C#与Java做一个语言级的对比,方便C# 转Java或Java转C#的人有个大致了解。 这里大致用C#3.0与Java6.0做比较。 写完后得知维基百科里有更加全面得多的比较: http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Java .NET(C#) Java 基本类型 基本类型 C#中有无符号数,Java没有。 C#中有值类型,且可自己定义值类型的结构体(struct)。 Java中的基本类型(或叫基元类型)即为值类型, 但Java没有结构体,所以不能自定义值类型。 C#中的值类型(包括所有基本类型)间接继承自Object, 有自己的方法可以调用;Java中的值类型(即基本类型) 不继承自Object,只是简单的数据,没有方法可以调用。 C#中int等同于System.Int32,是值类型; bool等同于System.Boolean;等。 Java中int是基本类型,是值类型, 而Integer是引用类型,Integer是int的包装器, int自身没有方法,Integer有一些方法; int与Integer之间可隐式转换(导致装箱和拆箱), 但当Integer值为null的时候会在运行时抛出异常。 boolean等类似。 Java中的int与Integer的对应在C# 中类似int和Nullable

Dictionary泛型集合

让人想犯罪 __ 提交于 2020-01-27 02:28:28
文章目录 1 Dictionary 1 Dictionary<K, V> 1.1 Dictionary<K, V>简介 关于Dictionary<K, V>泛型集合: Dictionary<K, V>通常称为字典,<K, V>约束集合中元素类型。 编译时检查约束类型,无需装箱拆箱操作,与哈希表操作类似。 Dictionary<K, V>的存储结构: 1.2 Dictionary<K, V>的创建 使用Add添加: //使用Add方法添加 Dictionary < string , Student > stuDic1 = new Dictionary < string , Student > ( ) ; stuDic1 . Add ( "VIP1" , student1 ) ; stuDic1 . Add ( "VIP2" , student2 ) ; stuDic1 . Add ( "VIP3" , student3 ) ; stuDic1 . Add ( "VIP4" , student4 ) ; stuDic1 . Add ( "VIP5" , student5 ) ; 使用集合初始化器: //使用集合初始化器 Dictionary < string , Student > stuDic2 = new Dictionary < string , Student > ( ) {

疯狂Java讲义-泛型

こ雲淡風輕ζ 提交于 2020-01-27 02:24:29
泛型 本章思维导图 泛型入门 Java集合有个缺点——把一个对象“丢进”集合里之后,集合就会“忘记”这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型(其运行时类型没变)。 编译时不检查类型的异常 下面代码将会看到编译时不检查类型所导致的异常。 import java . util . ArrayList ; import java . util . List ; public class ListErr { public static void main ( String [ ] args ) { // 创建一个只想保存字符串的List集合 List strList = new ArrayList ( ) ; strList . add ( "十年寒窗无人问" ) ; strList . add ( "纵使相逢应不识" ) ; // "不小心"把一个Integer对象"丢进"了集合 strList . add ( 5 ) ; strList . forEach ( str - > System . out . println ( ( ( String ) str ) . length ( ) ) ) ; } } 上面程序创建了一个List集合,而且只希望该List集合保存字符串对象——但程序不能进行任何限制

【C#进阶系列】12 泛型

冷暖自知 提交于 2020-01-27 00:03:26
泛型是CLR和编程语言提供的一种特殊机制,它用于满足“算法重用” 。 可以想象一下一个只有操作的参数的数据类型不同的策略模式,完全可以用泛型来化为一个函数。 以下是它的优势: 类型安全 给泛型算法应用一个具体的数据类型时,如果不兼容这种类型,就会编译错误或者报异常。 更清晰的代码 减少了强制转换,让代码更简洁 更佳的性能 用泛型可以有效避免装箱拆箱的操作,且无需在进行强制转换时验证是否类型安全,这两点都有效提高了代码的性能。 这就是为什么List<T>淘汰了ArrayList的原因,特别是在进行值类型操作时,因为装箱拆箱过多而差距很大。 约定:泛型参数要么为T要么以大写T开头,例如List<T>。 FCL中的泛型 System.Collections.Generic和System.Collections.ObjectModel命名空间中提供了多个泛型集合类和接口。 System.Collections.Concurrent命名空间则提供线程安全的泛型集合类。 System.Array类则提供了大量的静态泛型方法。 泛型的基础结构 .net 2.0才有泛型。 开放类型和封闭类型 之前我们讲到CLR会为各种类型创建类型对象,同样一个新的泛型类TroyList<T>也会创建一个类型对象,我们将具有泛型参数的类型称为 开放类型。 不能构造开放类型的实例 而指定了泛型类型实参的泛型类型称为

java -- 集合 - 3( 泛型 )

偶尔善良 提交于 2020-01-26 19:49:13
第三章 : 泛型 3.1 、泛型概述 在前面学习集合时,我们都知道集合中是可以存放任意对象的,只要把对象存储集合后,那么这是他们会被提升成Object类型。当我们在取出每一个对象,并且进行相应的操作,这是必须采用类型转换。 import java . util . ArrayList ; import java . util . Collection ; import java . util . Iterator ; public class GenericDemo { public static void main ( String [ ] args ) { show01 ( ) ; show02 ( ) ; } // 创建集合对象不使用泛型, // 好处:集合不使用泛型,默认类型就是Object类型,可以存储任意任意类型的数据 // 弊端:不安全,可能会引发异常 private static void show01 ( ) { ArrayList list = new ArrayList ( ) ; list . add ( "abc" ) ; list . add ( 10 ) ; // 使用迭代器遍历list集合 //获取迭代器 Iterator it = list . iterator ( ) ; // 使用迭代器中的方法hasNext和next遍历集合。 while (

每日一题总结 2020.01.26-2020.02.04

谁说胖子不能爱 提交于 2020-01-26 18:12:56
“>>”(有符号)右移,如果为正,高位补”0“; ----------------------------- 如果为负,高位补”1“。 ”>>>“ 无符号右移/逻辑右移,无论正负都补"0" 。(不管原数的符号位,就是把32位数右移,最后高位补"0") 没有无符号左移。Java中int类型是4字节, 32位 ,所以左移时要注意。(不是看当前数字有几位)。负数是以补码形式存储的,所以负数的左移和右移要先看补码左右移的结果, 然后根据”补码的补码是原码“求得最终结果。 (要注意求反码时: 符号位不变 ,其他位取反。) 比如:-10<<2:(加粗的"1"是符号位) -10的原码是000…0(27个0) 1 1010 , ------------------------------------------------------ 反码是111…1(27个1) 1 0101, ----------------------------- ------------------------ 补码 是111…1(27个1) 1 0110, 将补码左移2位的结果是: --------------------------------------------------------------- 111…1(25个1) 1 011000 接下来需要对补码求补码得到最终结果: ----------------

AutoMapper(七)

倖福魔咒の 提交于 2020-01-26 02:35:01
返回总目录 Null值替换 如果源类型的成员链上的属性值为Null,Null值替换允许提供一个可替换的值。下面有两个类Person和PersonInfo类,都有一个属性Title(头衔),从Person映射到PersonInfo,如果Person的属性没有赋值,那么PersonInfo的对应属性值就用“屌丝”来替换。 namespace SeventhAutoMapper { class Person { public string Title { get; set; } } class PersonInfo { public string Title { get; set; } } class Program { static void Main(string[] args) { //映射 Mapper.CreateMap<Person, PersonInfo>() .ForMember(dest => dest.Title, opt => opt.NullSubstitute("屌丝"));//源属性如果为null,置为“屌丝” //执行映射 var personInfo = Mapper.Map<PersonInfo>(new Person());//源属性未赋值,故为null var personInfo2 = Mapper.Map<PersonInfo>(new