泛型

集合框架

柔情痞子 提交于 2020-01-30 08:51:23
参考网址:http://blog.csdn.net/speedme/article/details/22398395 一.集合 1.集合与数组的区别 总述:几乎有有的集合都是基于数组来实现的, 因为集合是对数组做的封装,所以,数组永远比任何一个集合要快,但任何一个集合,比数组提供的功能要多 (1)数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。 (2)一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 (3)数组是一种可读/可写数据结构---没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。 集合的特点: a.空间可增长 b.可以存储不同类型的数据 数组的特点: a.空间固定 b.只能存储某种类型的数据 集合的分类: a.collection:List(ArrayList,LinkedList)和Set(HashSet,TreeSet,LinkedHashSet) b.Map(映射):HashMap,TreeMap和LinkedHashMap Collection与Map的区别: 容器内每个为之所存储的元素个数不同。 Collection类型者,每个位置只有一个元素。 Map类型者,持有 key-value pair,像个小型数据库。 注意:

九、Java中的泛型

寵の児 提交于 2020-01-30 04:37:17
1.泛型的定义 在引出泛型之前,我们首先来看这样一个案例: 我们知道,Object 类是所有类的基类,因此我们如果创建一个 Object 类型的数组,那么我们就可以往里面添加任意类型的元素。我们以包装类为例,分别添加不同的包装类,在遍历数组时都按 String 类型对其元素进行使用,那么运行时就会报出异常。 public static void main(String[] args) { //创建一个Object类数组 Object[] objects = new Object[10]; //为Object数组给定不同包装类型元素 objects[0] = (Integer)12; objects[1] = "aaa"; objects[2] = (Double)12.5; //遍历输出这个数组 for (int i = 0; i < objects.length; i++) { String a = (String)objects[i]; System.out.println(a); } } 对于类似情形—— 把类型明确的工作推迟到创建对象或调用方法的时候 ,我们就可以引入泛型来解决这个问题。 泛型是在 JDK 1.5 中引入的一个新特新,就是所谓的 “ 参数化类型 ” 。将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),

C#泛型

霸气de小男生 提交于 2020-01-30 03:54:32
目录 泛型 1、没有泛型的年代 2、泛型的出现 3、泛型的调用 4、泛型是如何工作的呢? 5、 泛型类 6、泛型接口 7、泛型委托 8、普通类可以继承泛型类 9、泛型约束 泛型 ​ 对于泛型的解释我们先看下百科的解释:泛型是 程序设计语言 的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其 编译器 、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。 泛型类 是引用类型,是堆对象,主要是引入了类型参数这个概念。 ​ 泛型是 .Net Framework 2.0提出的,我对他的理解就是 泛型的出现就是为了解决用一个方法,满足不同的参数类型,做相同的事的需求。 1、没有泛型的年代 我们只能看类型写方法,尽管他们的功能是一样的参数是不同类型的,那时候我们没有办法,例如: ​ 当然,我们承认一点就是说,ShowString() 和ShowInt()这两个方法绝对是最快的,因为它就是自己类型的操作一点多余的损耗也没有, 但是没用啊 !! 你看着这么多重复的代码你不烦吗? 我们是这样重复代码的,那时候能够解决不同参数的办法只有一个,就是用基类 Object 2、泛型的出现 泛型的出现上面说了是.Net Framework 2.0出现的,他的作用就是为了解决相同功能不同参数的需求。

Java基础面试知识点总结

纵然是瞬间 提交于 2020-01-30 02:28:02
本文主要是我最近复习Java基础原理过程中写的Java基础学习总结。Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理。 纸上得来终觉浅,绝知此事要躬行。笔者之前对每部分的内容 对做了比较深入的学习以及代码实现,基本上比较全面地讲述了每一个Java基础知识点,当然可能有些遗漏和错误,还请读者指正。 更多关于Java后端学习的内容请到我的CSDN博客上查看: https://blog.csdn.net/a724888 Java基础学习总结 每部分内容会重点写一些常见知识点,方便复习和记忆,但是并不是全部内容,详细的内容请参见具体的文章地址。 面向对象三大特性 继承:一般类只能单继承,内部类实现多继承,接口可以多继承 封装:访问权限控制public > protected > 包 > private 内部类也是一种封装 多态:编译时多态,体现在向上转型和向下转型,通过引用类型判断调用哪个方法(静态分派)。 运行时多态,体现在同名函数通过不同参数实现多种方法(动态分派)。 基本数据类型 基本类型位数,自动装箱,常量池 例如byte类型是1byte也就是8位,可以表示的数字是-128到127,因为还有一个0,加起来一共是256,也就是2的八次方。 32位和64位机器的int是4个字节也就是32位

深入理解C# 第三版学习笔记

不羁的心 提交于 2020-01-29 22:52:44
第一章 P1 本书的关键主题之一就是进化(或者说演变)。在将任何特性引入语言之前,设计团队都会把这个特性放到现有的环境中,同时还会就其总体发展目标,对其进行严格的考察。 P4 (在P3展示了C#1.0中产品类及列表的定义方法后) C# 1的代码存在如下3个局限: ArrayList没有提供与其内部内容有关的编译时信息。完全有可能不慎在Product类型的ArrayList列表中添加一个字符串类型的对象后,编译器还当做无事发生过 代码中为属性提供了公共的取值方法,这意味着如果添加对应的赋值方法,那么赋值方法也必须是公共的。 用于创建属性和变量的代码过于复杂 P5-7 (展示了C#2、3版本中对上述三个问题的解决方法) 使用支持泛型的List取代类型不安全的ArrayList。后者考虑到兼容性依然保留,但不再推荐使用 public属性可以有private的赋值方法 支持自动实现与简化对象的属性 P8 排序和过滤的代码示范 在C#1的代码中,通过实现ArrayList的IComparer接口对列表进行排序。期间必须实现两次强制类型转换,将两个在ArrayList中以Object类型存储的,待比较的对象转化为Product,然后再比较。不仅涉及到性能问题,也有类型不安全的隐忧 P9 使用泛型与匿名函数优化后的代码 使用泛型使我们跳过了强制类型转换,而匿名函数则精简了接口的实现过程

Java集合框架(java.util包)

不想你离开。 提交于 2020-01-29 05:53:31
集合的概念:   是一种工具类,可以存储任意数量、任意类型的对象(所以后面需要用到泛型,以约束集合中元素的类型) 集合的作用:   1、在类的内部对属性进行组织   2、方便快速定位属性位置   3、某些集合接口,提供了一系列排列有序的元素,可以在序列中快速插入或删除   4、某些集合接口,提供了映射关系,可以通过关键字(key)快速查找到对应的唯一对象,而这个key可以是任意类型 集合与数组的差别:   1、数组长度固定,集合长度可变   2、数组只能通过下标访问具体元素,集合则可通过任意类型查找所映射的具体对象 Java集合框架体系结构:根接口——子接口——实现类(并未全部列出) List接口及其常用实现类——ArrayList   1、List是元素有序并且可以重复的集合,称为序列   2、List可以精确插入或删除某个位置的元素   3、ArrayList——数组序列,底层是由数组实现的 ArrayList实现的方法详见Java API文档:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh 注意:对象存入集合都会变成Object类型,取出时需要进行类型转换 泛型:   集合中的元素可以是任意类型的对象,如果把某个对象放入集合,则会忽略他的类型,当作Object处理   1、泛型集合中

.NET基础面试题整理

泪湿孤枕 提交于 2020-01-29 04:25:45
1.什么是.NET?什么是CLI?什么是CLR?IL是什么? (1).net用于代码编译和执行的集成托管环境,换句话,它管理应用程序运行的方方面面,包括首次运行的编译,为程序分配内存 存储数据和指令,对于应用程序授予或拒绝相应的权限,并启动管理应用程序的执行,剩余内存的在分配。由于所有.net应用程序 都是在.net framework上面执行,所以开发人员只需考虑与.net framework打交道,而不必关系和底层操作系统上面的实现 包括CLR和BCL (2).CLI(common language infrastructure)公共语言基础结构,一项国际性的标准,没有规定标准具体如何实现。相反,它描述了一个 CLI平台在符合标准的前提下应该具有什么行为。包含了:运行时(CLR),公共中间语言(CIL),公共类型系统(CTS), 公共语言规范(CLS),元数据(Metadata),框架(framework) (3)CLR:公共语言运行时,负责加载和运行程序 IL:中间语言,C#编译器将C#代码转换成IL,运行时能够理解IL,并编译成机器码 2.JIT是什么,它是如何工作的?GC是什么,简述一下GC的工作方式? JIT:Just in time,C#或者是VB.NET的代码首先被编译为IL存储在本地,当要运行这些代码的时候,CLR对IL进行第二次编译转换成机器码运行。好处

TypeScript 泛型

被刻印的时光 ゝ 提交于 2020-01-28 12:42:04
介绍 软件工程中,我们不仅要创建一致的定义良好的API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。 在像C#和Java这样的语言中,可以使用 泛型 来创建可重用的组件,一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件。 泛型之Hello World 下面来创建第一个使用泛型的例子:identity函数。 这个函数会返回任何传入它的值。 你可以把这个函数当成是 echo 命令。 不用泛型的话,这个函数可能是下面这样: function identity(arg: number): number { return arg; } 或者,我们使用 any 类型来定义函数: function identity(arg: any): any { return arg; } 使用 any 类型会导致这个函数可以接收任何类型的 arg 参数,这样就丢失了一些信息:传入的类型与返回的类型应该是相同的。 如果我们传入一个数字,我们只知道任何类型的值都有可能被返回。 因此,我们需要一种方法使返回值的类型与传入参数的类型是相同的。 这里,我们使用了 类型变量 ,它是一种特殊的变量,只用于表示类型而不是值。 function identity<T>(arg: T): T { return arg;

Java泛型简单的使用

馋奶兔 提交于 2020-01-28 03:10:04
前言 相信写Java的人,大都有用过List的实现类ArrayList。在Java没有泛型之前,它的内部是一个Object的数组实现的。这也导致一个问题,每次使用里面的元素的时候需要向下转型,而且很明显,如果是Object的话,意味着我们可以丢任何对象进去。自动转型成Object,这样在使用的时候就很容易出问题,不知道里面存的是什么。如: ArrayList list = new ArrayList();list.add("string1");list.add("string2");String str = (String) list.get(0);list.add(new File("test.txt")); 然而使用泛型容易,我们就经常使用List的泛型,但是如果我们要写一个泛型的类其实并不那么容易。 最简单的泛型 /** * className MyObject * description MyObject */public class MyObject<T> extends BaseData { private T valueOne; private T valueTwo; public MyObject(T valueOne, T valueTwo) { this.valueOne = valueOne; this.valueTwo = valueTwo; }

Java学习(三)

对着背影说爱祢 提交于 2020-01-28 00:18:34
Java学习(三) 标签(空格分隔): Java 集合框架 java集合类主要有以下几种: List结构的集合类: ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类: HashMap类,Hashtable类 Set结构的集合类: HashSet类,TreeSet类 Queue结构的集合 Queue接口 HashMap和Hashtable的区别 HashMap与Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点,但是他们也有区别: 一、历史原因: Hashtable 是基于陈旧的Dictionary类的,HashMap是java1.2引进的Map接口的一个实现 二、同步性: Hashtable 是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率 三、值:HashMap可以让你将空值作为一个表的条目的key或value但是Hashtable是不能放入空值的(null) ArrayList和Vector的区别