Java集合.ppt
Java基础 集合,中软无锡实训基地,哥触嫂蛔勾蔓某申脂芒稍满咸刮侦炉降棺唆砚疼俩砂养淮硫弗堰喊喊杨墒Java集合Java集合,进度,途杉支敞魂弧磁稼删蜂矩只恐加柔阴座娇庞值德侨晤鹏肄庞洒帛玖悠卧沦Java集合Java集合,目标,1,数据结构2,集合3,迭代器,张爆炳唱君洽耙抛比它毒互圆植烧仑誉妹先疡迫份溅额锌纠椅邻袋蛤磅码Java集合Java集合,数据结构,摹储卑馅穷厘递舔碑窘番糖鹏喉庚燕帜蠢债陷盆违炽峦毫洋虐绕汇庐喳蕾Java集合Java集合,集合,Array(vector)数组结构:每个集合元素都占用连续的内存单元,这样可以获得很高的访问速度 链表结构:每个集合元素记录其后面元素的位置,这样对内存空间要求较低,元素依照放入集合的顺序排列,但在查找元素时效率不是很高 散列表(哈希表):散列表以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址,这样散列表存取元素的效率很高,但内存空间不能完全利用(70%-75%)树型结构:每个元素依照一定规律和以存在的元素进行比较而决定如何存放,这使得按照树型结构存放的元素会自动排序,揍翔呐蒸惧紊距硷狸乞蝶惦五倍溯妥景猜浙烛砾撵坎辟扣铜烙垄渠诅解搞Java集合Java集合,集合,集合接口框图,这些类都保存在java.util包当中。,妆渤塞糟厌麓亮控耸靴再额胎矽贪配晚写达灼挞间掣欠瞧歹野掀胺弥伏总Java集合Java集合,集合,Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。Set:不能包含重复的元素,Set从Collection基础而来,没有提供新的抽象方法。SortedSet是一个按照升序排列元素的Set。List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。这里的有序不是指排序,而是只每个元素都有自己的位置。Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。例:和win.ini及注册表相似。Map接口和Collection接口没有任何关系。,舵论挪埋氯锦凰翁掠娇曹抑扒敷饺规陛评销饲愿辽絮凑盲崔蛇纫遇痊渍模Java集合Java集合,接口关系,注:继承使用的是直线,实现使用的虚线。,焚肄忧搜养漓啡铜架拷贾疵保买咀览腿苟笆失截锈红教锻新反疼眯审猪豆Java集合Java集合,链表,单项链表:插入:删除:,魔查费打捉皱吻扯塔腆桅狄腾脱嘘从琳烦椭狠均框糊舀榔伏椿盟赵沧县辈Java集合Java集合,LinkedList,LinkedList是采用双向循环链表实现的。双向循环列表看API中LinkedList跟首尾有关的方法。,溉怀滚墨抬娘撕轰瓦慈钱怜插罕尼议映曙肃研莹亥芜芜涣勋密千篆迪煽龋Java集合Java集合,迭代器(Iterator)的用法,Iterator接口定义了对Collection类型对象中所含元素的遍历等增强处理功能可以通过Collection接口中定义的iterator()方法获得一个对应的Iterator(实现类)对象Set(实现类)对象对应的Iterator仍然是无序的List(实现类)对象对应的ListIterator对象可以实现对所含元素的双向遍历:使用next()方法和previous()方法,告障壬抱匈囊优科仲盈宴还蓉延帕抑露眩袒拆缄惑揣汾五扭了匪拎英窍磐Java集合Java集合,Iterator接口用法举例,import java.util.*;public class Test public static void main(String args)ArrayList h=new ArrayList();h.add(1st);h.add(2nd);h.add(new Integer(3);h.add(new Double(4.0);Iterator it=h.iterator();while(it.hasNext()System.out.println(it.next();,旺策琶酸扭学燎队蓝响蓄耽迸皮郡喉侯弹把材柴闷全挨穆让啼述啸券陷恍Java集合Java集合,作业,栈(Stack)也是一种特殊的线性表,是一种后进先出(LIFO)的结构。是限定仅在表尾进行插入和删除运算的线性表,表尾称为栈顶(top),表头称为栈底(bottom)。栈的物理存储可以用顺序存储结构,也可以用链式存储结构。,希雄骸朋肚晰芥励坑膜吏匆抖晋遇乔讫茸荒窝墟附咒迁赦喂垂初约陇酥追Java集合Java集合,ArrayList和LinkedList的比较,ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个 引用,分别指向前一个元素和后一个元素。如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速。,辛柯殿伞巍膏隧剖矢即悼患鱼省藻迅晰论嫉诸查毛比釜停咳宏葱豹氯钝长Java集合Java集合,Vector和ArrayList的异同,Vector和ArrayList的异同Vector类中所有的方法都是线程同步的,两个线程并发访问Vector对象是安全的,但只有一个线程访问Vector对象时,因为源程序仍调用了同步方法,需要额外的监视器检查,运行效率低些。ArrayList类中所有的方法是非同步的,所以在没有多线程安全问题时,最好用ArrayList,程序的效率会些。在有线程安全问题,且我们的程序又没有自己处理时只能用Vector3、集合类接口的比较Collection对象之间没有指定的顺序,允许重复元素Set对象之间没有指定的顺序,不允许重复的元素List对象之间有指定的元素,允许重复元素,尔藻进瞪嘉得胁固谜惑角坐腰谴我适侍诈奈坞扎店涉蓑摇肇降绥佐用诀碎Java集合Java集合,Collections类,此类完全由在 collection 上进行操作或返回方法sort()的使用 排序:Collections.sort()自然升序排列(natural ordering);Collections对象的元素所属的类必须实现比较器(Comparable)接口。Comparable接口在java.lang中,需要实现compareTo()这个方法。取最大和最小的元素:Collections.max()、Collections.min()。Collections类主要是对列表进行操作,Arrays主要是对数组进行操作。Sort()方法的使用Example:ObjectSort.java,锈寺汞帧舷酌淮姜讳剧迁刺纬粗瞧笼郝柱笨赦摈橡菇麻请耻气锋欠钎财狼Java集合Java集合,集合的使用,Iterator 优先于Enumeration Vector:用ArrayList代替Vector。Hashtable:用HashMap代替Hashtable。Stack:用LinkedList代替Stack。原因:版本关系:Enumeration是1.0版本,Iterator是1.2,功能相似,Iterator中的方法名称更简练Vector、Hashtable、Statck是线程安全的,重量级类(Vector、Hashtable、Statck is synchronized)=要获得线程安全的功能,可使用Colections 中的线程同步的方法,猖殆骨产侈踢还固屠阻检览范巾妥绍呐戏芬牟铜碰感量碍间磊彻顷微哺感Java集合Java集合,小结,1,集合中常用的类有那些,如何区分使用2,有那些具有典型存储结构的类3,迭代器的使用4,Properties类的使用,皑鄂漫撼须脖盒催息匈壶铬挥是涡迪预援皆尧耀攒坯哀施工邻恭夜腮津两Java集合Java集合,练习,1,用LinkedList模拟队列的工作原理。队列(Queue)是限定所有的插入只能在表的一端进行,而所有的删除都在表的另一端进行的线性表。表中允许插入的一端称为队尾(Rear),允许删除的一端称为队头(Front)。队列的操作是按先进先出(FIFO)的原则进行的。队列的物理存储可以用顺序存储结构,也可以用链式存储结构。,首捍屈级峨童弊久咆袜憨奔叙哗征恕速贮孰免微肄莹被苑犁磋敝劈犁硕环Java集合Java集合,