- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
阿里巴巴电话面试题目
你对Java的集合框架了解吗? 能否说说常用的类?
Java集合框架类图:
我常用的类:
HashMap,Hashtable,HashSet,ArrayList,Vector,LinkedList,Collections,Arrays;
说说Hashtable与HashMap的区别(源代码级别)
最明显的区别在于Hashtable 是同步的(每个方法都是synchronized),而HashMap则不是.
HashMap继承至AbstractMap,Hashtable继承至Dictionary ,前者为Map的骨干, 其内部已经实现了Map所需要做的大部分工作, 它的子类只需要实现它的少量方法即可具有Map的多项特性。而后者内部都为抽象方法,需要它的实现类一一作自己的实现,且该类已过时
两者检测是否含有key时,hash算法不一致,HashMap内部需要将key的hash码重新计算一边再检测,而Hashtable则直接利用key本身的hash码来做验证。HashMap:
int hash = (key == null) ? 0 : hash(key.hashCode());
-----
static int hash(int h) {
h ^= (h 20) ^ (h 12);
return h ^ (h 7) ^ (h 4);
} Hashtable:
int hash = key.hashCode();
两者初始化容量大小不一致,HashMap内部为 16*0.75 , Hashtable 为 11*0.75 HashMap:
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75f;
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR;
threshold=(int)(DEFAULT_INITIAL_CAPACITY*DEFAULT_LOAD_FACTOR);
table = new Entry[DEFAULT_INITIAL_CAPACITY];
init();
} Hashtable:
public Hashtable() {
this(11, 0.75f);
}
-----
public Hashtable(int initialCapacity, float loadFactor) {
..........
this.loadFactor = loadFactor;
table = new Entry[initialCapacity];
threshold = (int)(initialCapacity * loadFactor);
} 后续的区别应该还有很多, 这里先列出4点。
平时除了ArrayList和LinkedList外,还用过的List有哪些?ArrayList和LinkedList的区别?
事实上,我用过的List主要就是这2个, 另外用过Vector.
ArrayList和LinkedList的区别:
毫无疑问,第一点就是两者的内部数据结构不同, ArrayList内部元素容器是一个Object的数组, 而LinkedList内部实际上一个链表的数据结构,其有一个内部类来表示链表.
(ArrayList)
private transient Object[] elementData; (LinkedList)
private transient EntryE header = new EntryE(null, null, null);/链表头
//内部链表类.
private static class EntryE {
E element; //数据元素
EntryE next; // 前驱
EntryE previous;//后驱
Entry(E element, EntryE next, EntryE previous) {
this.element = element;
this.next = next;
this.previous = previous;
}
} 两者的父类不同,也就决定了两者的存储形式不同。 ArrayList继承于 AbstractList,而LinkedList继承于AbstractSequentialList. 两者都实现了List的骨干结构,只是前者的访问形式趋向于 “随机访问”数据存储(
您可能关注的文档
- 西方经济学高鸿业人教版PPT课件第二章.ppt
- 西班牙语北京六大景点导游词 学习入门发音语法人名.doc
- 西门子SMART700 触摸屏的使用说明书.doc
- 视觉艺术无形式化趋势.doc
- 解读溶解度曲线.doc
- 解析電能管理應用在量販店之節能效益 - 台灣能源技術服務產業發展協會.ppt
- 言语理解与表达高频考点汇总.doc
- 言语理解(易错题库和有争议的题).doc
- 解析電能管理需量控制之節能效益 - 台灣能源技術服務產業發展協會.ppt
- 解读北京卫生信息化十二五规划PPT-王晖.ppt
- 2025年中国铸管沥青漆喷涂机市场调查研究报告.docx
- 2025至2031年中国聚四氟乙割管料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国屏蔽箱行业投资前景及策略咨询研究报告.docx
- 2025年中国B级电源电涌保护器市场调查研究报告.docx
- 2025至2031年中国陶瓷印章行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国保冷材料行业投资前景及策略咨询研究报告.docx
- 2025至2031年中国金彩立雕玻璃行业投资前景及策略咨询研究报告.docx
- 2025至2030年中国机箱螺母柱数据监测研究报告.docx
- 2025至2030年中国小GS管装饰头数据监测研究报告.docx
- 2025至2030年中国气动电阻焊机数据监测研究报告.docx
文档评论(0)