java怎么复用代码 java编写代码实现文件复制的功能( 二 )


java中简述 继承 代码复用继承java怎么复用代码:同类事物具有共同性java怎么复用代码,在同类事物中,每个事物又具有其特殊性 。运用抽象的原则舍弃对象的特殊性,抽取其共同性 , 则得到一个适应于一批对象的类,这便是基类(父类),而把具有特殊性的类称为派生类(子类),派生类的对象拥有其基类的全部或部分属性与方法,称作派生类对基类的继承 。
代码复用java怎么复用代码:在OO编程中,在继承 多台等机制下 利用已有的代码完成新的程序
javaint=22是什么:ArrayList 和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素 , 但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢 , Vector由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差 , 而LinkedList 使用双向链表实现存储(将内存中零散的内存单元通过附加的引用关联起来,形成一个可以按序号索引的线性结构 , 这种链式存储方式与数组的连续存储方式相比,其实对内存的利用率更高) , 按序号索引数据需要进行前向或后向遍历 , 但是插入数据时只需要记录本项的前后项即可 , 所以插入速度较快 。Vector属于遗留容器(早期的JDK中使用的容器,除此之外Hashtable、Dictionary、BitSet、Stack、Properties都是遗留容器),现在已经不推荐使用 , 但是由于ArrayList和LinkedListed都是非线程安全的,如果需要多个线程操作同一个容器,那么可以通过工具类Collections中的synchronizedList方法将其转换成线程安全的容器后再使用(这其实是装潢模式最好的例子,将已有对象传入另一个类的构造器中创建新的对象来增加新功能) 。
补充:遗留容器中的Properties类和Stack类在设计上有严重的问题,Properties是一个键和值都是字符串的特殊的键值对映射,在设计上应该是关联一个Hashtable并将其两个泛型参数设置为String类型,但是Java API中的Properties直接继承了Hashtable,这很明显是对继承的滥用 。这里复用代码的方式应该是HAS-A关系而不是IS-A关系,另一方面容器都属于工具类,继承工具类本身就是一个错误的做法,使用工具类最好的方式是HAS-A关系(关联)或USE-A关系(依赖)。同理,Stack类继承Vector也是不正确的 。
221.List、Map、Set 三个接口 , 存取元素时,各有什么特点?
答:List以特定索引来存取元素,可有重复元素 。
Set不能存放重复元素(用对象的equals()方法来区分元素是否重复)。Map保存键值对(key-value pair)映射,映射关系可以是一对一或多对一 。Set和Map容器都有基于哈希存储和排序树(红黑树)的两种实现版本,基于哈希存储的版本理论存取时间复杂度为O(1) , 而基于排序树版本的实现在插入或删除元素时会按照元素或元素的键(key)构成排序树从而达到排序和去重的效果 。
222.TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
答:TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法 , 当插入元素时会回调该方法比较元素的大小 。
TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序 。
Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较;第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接口的子类型 (需要重写compare方法实现元素的比较),相当于一个临时定义的排序规则,其实就是是通过接口注入比较元素大小的算法,也是对回调模式的应用 。

推荐阅读