A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1002865186 中级黑马   /  2012-3-26 22:54  /  1698 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求教一下:抽象类和接口的区别;
arraylist 和 vector的区别;
hashmap和hashtable的区别;
String 和 StringBuffered 的区别
尽量回答的详细些,谢谢啦

4 个回复

倒序浏览
Vector从Java 1.0起就存在,ArrayList从Java 1.2起才存在,较新。ArrayList不具备线程同步的安全性,但速度较快。Vector具备线程安全
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
String类对象数组可直接调用java.util.Arrays.sort()排序,而StringBuffered类对象数组不可以

String类的对象和StringBuffered类对象如果想要使用对象的方法进行一些处理,那么StringBuffered类对象可以使用public String toString()或public String (StringBuffer buffer)转为String类的对象使用,而String类的对象可以使用public StringBuffer(String str) 转为StringBuffered类对象使用。

一般的字符串对象都用String类,因为方便赋值,而且其具有的方法也多。而StringBuffered类对象主要用于经常修改的字符串对象。因为String类是常量类,其对象不可修改,对于其连接“+”操作会产生大量的内存垃圾,而StringBuffered类对象不会。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
回复 使用道具 举报
抽象类和接口的区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
    2.抽象类中可以有普通成员变量,接口中没有普通成员变量
    3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
    4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
    5. 抽象类中可以包含静态方法,接口中不能包含静态方法
    6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
        7. 一个类可以实现多个接口,但只能继承一个抽象类。
        可以说接口是一个特殊的抽象类。
String 和 StringBuffer 的区别(你写错了不是String    Buffered)
String的长度是不可变的,StringBuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法。
ArrayList和Vector的区别
二者都是java中的集合类,都可以用来存放java对象。
区别在于:
1、同步性:Vector是同步的。这个类中的一些方法保证了Vector中的对象是线程安全的。而ArrayList是异步的,因此ArrayList中的对象并不是线程安全的。同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样能避免由于同步带来的不必要的性能开销。
2、数据增长:从内部实现机制来讲ArrayList和Vector都是使用数组Array来控制集合中的对象。当你向这两种类型中增加元素的时候,如果元素的数目超出了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你需要的要大。因此在集合中保存大量的数据Vector有一些优势,可以通过设置集合的初始化大小来避免不必要的资源开销。

HashMap和HashTable的区别
二者都是java中的集合类,都可以用来存放java对象。
区别在于:
历史原因:HashTable是基于陈旧的Dictionary类的,HashMap是Java1.2引进的Map接口的一个实现。
同步性:HashTable是同步的。这个类中的一些方法保证了HashTable中的对象是线程安全的。而HashMap则是异步的,因此HashMap中的对象并不是线程安全的。同步的要求会影响执行的效率,所以如果你不需要线程安全的集合那么使用HashMap是一个很好的选择,这样能避免由于同步带来的不必要的性能开销。
值:HashMap可以让你将空值作为一个表的条目的Key或Value,但是HashTable是是不能放入空值的(null)。


手打的。

点评

这个哥们,太给力了  发表于 2012-3-26 23:49

评分

参与人数 1技术分 +1 收起 理由
职业规划-刘倩老师 + 1 赞一个!

查看全部评分

回复 使用道具 举报
      抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。
   另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
   接口:
   接口是引用类型的,类似于类,更和抽象类有所相似,以至于很多人对抽象类和接口的区别比较模糊。和抽象类的相似之处有三点:
 1、不能实例化;
 2、包含未实现的方法声明;
 3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员。
回复 使用道具 举报
抽象类:声明方法的存在而不去实现它的类被叫做抽象类 它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
接口:所有方法都是抽象的  接口主要是实现JAVA的多继承   还有一种说法不知道你听说过没有 是面向接口的编程  其实接口可以看成一种契约
arraylist 和vector  你就这样想 vector已经被arraylist给代替了 没必要去理解他的机制  而arraylist实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步
String:首先是一个静态类 而StringBuffered 不是静态类 所以它的append操作不存在对象的消耗问题  还有 使用String的话会在内存中开辟很多空间 占用内存 而StringBuffered  永远只有一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马