复习总结(API和集合)

来源:互联网 发布:伦敦留学 知乎 编辑:程序博客网 时间:2024/06/16 13:03

---------------------- android培训、java培训、期待与您交流! ----------------------

每天复习一点点:

Java API按照内容分别组织和存放在不同的包中,Java API中的包及其主要功能按字母顺序说明如下:
        java.accessibility 接口组件和助手技术的类和接口
        java.applet         Applet所需的类和接口
        java.awt            图形用户界面所需的类和接口
        java.beans          Java bean所需的类和接口
        java.io             系统输入/输出所需的类和接口
        java.lang           Java语言编程的基础类和接口
        java.math           支持任意精度整数和任意精度小数的类和接口
        java.naming         访问命名服务的类和接口
        java.net            网络应用的类和接口
        java.rmi            远程调用(RMI)的类和接口
        java.security       用于安全框架的类和接口
        java.sql            访问和处理数据源中数据的类和接口
        java.text           支持按与语言无关方式处理文本、数据、数字和消息的类和接口
        java.util           集合框架、事件模型、日期和时间机制、国际化等的类和接口
        javax.rmi           支持RMI-IIOP的类和接口
        javax.serverlet     支持serverlet编程的类和接口
        javax.sound         支持音频设备数字接口(MIDI)的类和接口
        javax.swing         扩充和增强基本图形用户界面功能的类和接口
        javax.transaction   包含有几个关于事务上下文异常的类
        org.omg.CORBA       支持OMG CORBA API到Java语言映射的类和接口


Java五个最常用的集合类之间的区别和联系

1.ArrayList: 元素单个,效率高,多用于查询
2.Vector:    元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap:   元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空

ArrayList
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。

LinkedList
经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
栈:后进先出的数据结构。
注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。

Vector
(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。

面试经验(知识点):
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。
实现栈一定要用LinkedList。
(在JAVA1.5中,collection有queue来实现队列。)

Set-HashSet实现类:
遍历一个Set的方法只有一个:迭代器(interator)。
HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。
在Object中除了有finalize(),toString(),equals(),还有hashCode()。
HashSet底层用的也是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=o.hashCode(); 返回的hashCode为整数值。
Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student对象时覆盖它的hashcode。
因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
现在,在大部分的JDK中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

我们要保证相同对象的返回的hashCode一定相同,也要保证不相同的对象的hashCode尽可能不同(因为数组的边界性,hashCode还是可能相同的)。

例子:
public int hashCode(){
return name.hashcode()+age;
}
这个例子保证了相同姓名和年龄的记录返回的hashCode是相同的。

使用hashSet的优点:
hashSet的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较开确定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。
但是hashSet增删的高效率是通过花费大量的空间换来的:因为空间越大,取余数相同的情况就越小。HashSet这种算法会建立许多无用的空间。
使用hashSet类时要注意,如果发生冲突,就会出现遍历整个数组的情况,这样就使得效率非常的低。

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 德国预科不能毕业怎么办 想出国打工怎么办手续 终结执行了该怎么办 网银界面打不开怎么办 abr检查结果异常怎么办 大排畸胎儿位置不好怎么办 交社保中途死了怎么办 不知道社保密码怎么办 社保卡没有信息怎么办 医保卡没有信息怎么办 信访局不受理怎么办 没身份证怎么办健康证 海峡银行怎么办医保卡 小学借读生学籍怎么办 光头也有头皮屑怎么办 情侣没话题了怎么办 月经前后有异味怎么办 头发里有湿疹怎么办 公务员退休职业年金怎么办 迅雷打不开怎么办安卓 苹果迅雷闪退怎么办 青羊区爱君家政欺骗学员怎么办 工地拿不到钱怎么办 包工头拿不到工程款怎么办 华夏盾密码错六次怎么办 怀孕六个月有孕纹了怎么办 课堂上不会讲课怎么办 怀孕吃薏米粥怎么办 吃了薏米肚子痛怎么办 孕期吃了薏米怎么办 怀孕误食薏米水怎么办 薏米吃多了怎么办 花生米炸糊了怎么办 经期吃了薏米怎么办 身体湿气很重怎么办 肠胃不好湿气重怎么办 我湿气特别重怎么办 脾胃不好湿气重怎么办 孕妇身体有湿气怎么办 孕妇身上有湿气怎么办 孕妇身上湿气重怎么办