发表于: 2017-10-09 21:25:07

1 727


今天完成的内容:

(1)今天主要补了一下基础。

1.ArrayList和Array

Array([]):最高效;但是其容量固定且无法动态改变;ArrayList:  容量可动态增长;但牺牲效率; ArrayList可看作成一种“会自动扩增容量的Array”。

基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList。

Array名称本身实际上是个引用,指向堆之中得某个实际对象,因此Array可做为函数返回值,Array对象可经由“Array初始化语法”被自动产生,也可以以new表达式手动产生。

对象数组与基本类型数组在运用上几乎一模一样,唯一差别在于,前者持有得是reference,后者直接持有基本类型之值;

例如:

string [] staff=new string[100];

int [] num=new int[10];

对数组的一些基本操作,像排序、搜索与比较等是很常见的。因此在Java中提供了Arrays类协助这几个操作sort(),binarySearch(),equals(),fill(),asList()。

不过Arrays类没有提供删除方法,而ArrayList中有remove()方法,不知道是否是不需要在Array中做删除等操作的原因(因为此时应该使用链表)。

ArrayList的使用也很简单:产生ArrayList,利用add()将对象置入,利用get(i)配合索引值将它们取出。这一切就和Array的使用方式完全相同,只不过少了[]而已。此外,ArrayList可以存任何Object,如String等。

1)效率:

数组扩容是对ArrayList效率影响比较大的一个因素。

每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本

ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2)类型识别:

ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。

ArrayList与数组的区别主要就是由于动态增容的效率问题了。

关于set和map:

list和set都是单列集合,他们有一个共同的父接口---collection。list是依次列出一个结合中的所有的元素,若集合中有重复的,同样列出,有序;set列出的集合中是不允许有重复的,也就是说里面有一个A对象和一个B对象,若是A.equals(B)==ture,那么用set方法列出的只会有一个,set集合默认是有序的,正向排序。一般遍历set里面的元素时使用iterator(迭代器)。

map<key,value> 它是一个双列的集合。里面有一个key,和一个value,其中value是真正存储值得变量。map存储的数据是无序的,其键(key)不能重复,但是其值(value)是可以重复的。

List、map、set用法及遍历方法见:http://blog.csdn.net/zhu_xun/article/details/20997051

http://blog.csdn.net/liunian02050328/article/details/10739445

关于StringBuffer:

String和StringBuffer他们都可以存储和操作字符串,即包含多个字符的字符串数据。

String类是字符串常量,是不可更改的常量。而StringBuffer是字符串变量,它的对象是可以扩充和修改的。

StringBuffer类的构造函数

public StringBuffer()

创建一个空的StringBuffer类的对象。

public StringBuffer(int length)

创建一个长度为 参数length 的StringBuffer类的对象。

注意:如果参数length小于0,将触发NegativeArraySizeException异常。

public StringBuffer(String str)

用一个已存在的字符串常量来创建StringBuffer类的对象。

常用方法见:http://www.cnblogs.com/liu-chao-feng/p/5636063.html

关于Null:详见http://www.importnew.com/14229.html

关于泛型:

泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。

泛型的定义主要有以下两种:

1.在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。

2.在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(人们大多把这称作模板)不论使用哪个定义,泛型的参数在真正使用泛型时都必须作出指明。

一些强类型编程语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一些支持泛型的编程语言只能达到部分目的。

Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。Java 允许对个别泛型的类型参数进行约束,包括以下两种形式(假设 T 是泛型的类型参数,C 是一般类、泛类,或是泛型的类型参数):(1)T 实现接口 I 。(2)T 是 C ,或继承自 C 。

明天的计划:Spring MVC rest接口,jetty等。

遇到的问题:rest有些部分忘记,明天好好回顾。

收获:以上。

禅道:http://task.ptteng.com/zentao/task-view-10655.html





返回列表 返回列表
评论

    分享到