还剩4页未读,继续阅读
文本内容:
1、Collection__框架的由来因为每个容器对象的自身的数据结构不同,所以对它们进行单独的描述和对象封装,并不断的向上抽取共性内容,这样变形成了__框架定义__就是一个容器、用来存储对象、长度可变理解其实班级就是一个容器,班上的每一个学生都是单独封装了功能的对象,因为班级中的人数由于有人请假每天都再变化,所以长度是可变的,常见方法
1、增加add;增加一个元素addAll;增加一部分元素
2、删除Remove;删除一个元素,会返回boolean类型,其实用到是equals方法,所以判断是否有符合要求的元素如果删除成功会改变__的长度下面同理removeAll;删除全部Clrea;清空容器总结在这里要尤其注意,面试题中经常考到
3、判断Contains;是否包含,也就说要所有的都包含在其中才算包含,否则不算包含isEmpty;__是否为空Size;__长度
4、取retainAll;取交集理解总结班级就是一个容器,班级中进来一位新生就是Add添加一个元素,来了一堆同学就是addAll,班上出去一个学生就是remove删除一个,出去一部分就是removeAll删除一部分,班级是不是有人,isEmpty班上是否包含张三contains,班上有多少人size班上是否包含隔壁班的同学retainAll.去交集__使用细节
1、直接存储基本数据类型值也是可以的,因为JDK
1.5后有自动装箱,会将基本数据类型转成对象,JDK
1.4绝对不行Eg:coll.add
32、__对象中存储的其实是对象的元素的引用
3、Add的参数是O__ect类型,可以接收所有的类型的对象,会出现向上转型,取出元素时类型还是O__ect不能使用具体对象的特有内容,想要使用特有内容向下转型Eg:O__ecto__=o__;想要取出访问子类的特有方法,向下转型,Strings=Stringit.next;sops.length;|--List有序列表存取顺序是一致的因为该子体系元素中有索引或角标,可以存储重复的元素常用方法//添加List.add1abc7;//[abc1abc7abc2abc3]在角标1位置往后顺延//删除O__ecto__=list.remove2;//删除指定索引上的元素,根据角标删除会返回来被删对象Sopo__;//o__abc2[abc1abc7abc3]//获取:获取指定角标上的元素并返回,这也是和remove的区别O__ecto__=list.get1;Sopo__;//o__:abc1[abc1abc7abc3]//获取元素的索引,如果元素存在返回索引,不存在返回-1,依次还可以判断元素是否存在Intindex=list.indexOfabc1;Sopindex;//index=1//获取指定的子列表sublistfromIndextoindex包含头不包含尾List=list.sublist12;//[abc1]//修改O__ecto__=list.set1haha;Sopo__;//[abc1hahaabc3]记住只有list__支持增删改查|--ArrayList低层是数组数据结构,不同步,查询快,增删慢,|--LinkedList低层是链表数据结构,不同步,查询慢,增删较快|--Vector低层是数组数据结构,同步,安全效率低,还有其特有方法枚举由于名称过长被iterator取代总结掌握这些__的方法,它们的方法和list__的方法很相似,重点掌握各种__的特点,尤其是前两个子类的低层数据结构|--Set无序、不能存储重复的元素、方法个collection__的方法一致|--HashSet低层是哈希表数据结构,无序,能保证元素的唯一性,是根据元素的两个方法来保证元素的唯一性的,hasCode和equals方法只有当hasCode算出的哈希值相同的情况下才去判断equals方法是否为true.如果为真说明两个元素相同,不存储,所以往hashSet__中存储自定义对象时要覆写hasCode方法和equals方法,重点掌握上述保证唯一性的方法以及哈希表内存原理实现|--linkedHashSet以元素的插入顺序来维护__的连接表,允许以插入的顺序的__中迭代的怎么去理解?HashSetStringhs=newHashSetString;hs.addB;hs.addA;hs.addD;hs.addE;hs.addC;hs.addF;System.out.printlnHashSet:+hs;LinkedHashSetStringlhs=newLinkedHashSetString;lhs.addB;lhs.addA;lhs.addD;lhs.addE;lhs.addC;lhs.addF;System.out.printlnLinkedHashSet:+lhs;TreeSetStringts=newTreeSetString;ts.addB;ts.addA;ts.addD;ts.addE;ts.addC;ts.addF;System.out.printlnTreeSet:+ts;结果HashSet:[DEFABC]LinkedHashSet:[BADECF]TreeSet:[ABCDEF]从结果可以知道对于LinkedHashSet__可以保证元素按照添加的顺序取出元素,而TreeSet__可以对__中的元素进行自然排序|--TreeSet用于给set__中元素按照指定的顺序进行排序,低层是二叉树结构,线程是不同步的,两种排序方式
1、让元素自身具备比较功能,就是强制让元素去实现comparable接口,覆盖compareTo方法这时元素具备的自然排序可是如果元素自身不具备比较的功能,获取具备的比较功能不是所需要的这时该排序方式就不能用了
2、让__自身具备比较功能,需要定义比较器,其实就是将实现了Comparator接口的子类对象作为参数传递给TreeSet__的构造函数,让treeSet__一创建就具备了比较功能该子类必须要覆盖compare方法掌握二叉树数据结构的特点不明白?
2、__p:特点
1、它是__框架中的顶层
2、它存储的是键值对
3、__p__中必须保证键的唯一性
4、如果存储键值对时,键重复,新值覆盖旧值其实存储的就是一种映射关系常见方法增加Put;putAll;删除Clrea;Removekey;判断containKey;containValue;获取getO__ectkey;Size;Values;entrySet;将__p__中的映射关系__p.Entry其实Entry也是一个接口,它是__p接口中的一个内部接口Inte_______p{publicstaticinte_____Entry{publicabstractO__ectgetKey;publicabstractO__ectgetValue;}}keySet;将__p中所有的键都存入了set__,因为set具备迭代器,所以可以迭代方式取出所有的键,在根据get方法获取每一个键对应的值__p__的取出原理将__p__转成set__,在通过迭代器取出.|--Hash__p:低层是哈希表数据结构,该__是不同步的,允许使用null键和null值JDK
1.2效率高|--LinkedHash__p:保证按照插入的顺序进行取出|--Tree__p:低层是二叉树数据结构,线程不同步,可以用于给__p__中的键进行排序
3、Iterator迭代器原理其实就collection这个__公共取出方式,因为每个容器的自身的数据结构不同,它们的取出方式也是不同的,要根据每个容器的特点来定义特定的取出方式,而取出方式直接在访问容器中的元素,所以将取出方式定义在容器的内部,是一个内部类,而对外提供访问接口这样可以通过接口访问任何的collection容器中的元素,所以它的出现降低了耦合性,我们只用面对Iterator接口,和使用接口就可以了理解抓布娃娃游戏机|--ListIterator列表迭代器要想在迭代过程中进行增删操作Iterator是不可以的,它只有删除动作,所以可以使用其子接口listIterator是list__特有的取出方式,它包包含了增删改查的方法
4、Collections和Collection的区别面试题
1、j__a.util.Collection是一个__接口它提供了对__对象进行基本操作的通用接口方法Collection接口在J__a类库中有很多具体的实现Collection接口的意义是为各种具体的__提供了最大化的统一操作方式 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set
2、j__a.util.Collections是一个包装类它包含有各种有关__操作的静态多态方法此类不能实例化,就像一个工具类,服务于J__a的Collection框架J__a代码HYPERLINKhttp://pengcqu.javaeye.com/blog/492196\o复制代码INCLUDEPICTUREhttp://pengcqu.javaeye.com/images/icon_copy.gif\*MERGEFORMAT
1.import j__a.util.ArrayList;
2.import j__a.util.Collections;
3.import j__a.util.List;
4.
5.public class TestCollections {
6.
7. public static void __inString args[] {
8. //注意List是实现Collection接口的
9. List list = new ArrayList;
10. double array[] = { 112 111 23 456 231 };
11. for int i = 0; i array.length; i++ {
12. list.addnew Doublearray[i];
13. }
14. Collections.sortlist;
15. for int i = 0; i array.length; i++ {
16. System.out.printlnlist.geti;
17. }
18. // 结果
23.0
111.0
112.0
231.0
456.0
19. }
20.} importj__a.util.ArrayList;importj__a.util.Collections;importj__a.util.List;publicclassTestCollections{publicstaticvoid__inStringargs[]{//注意List是实现Collection接口的Listlist=newArrayList;doublearray[]={11211123456231};forinti=0;iarray.length;i++{list.addnewDoublearray[i];}Collections.sortlist;forinti=0;iarray.length;i++{System.out.printlnlist.geti;}//结果
23.
0111.
0112.
0231.
0456.0}} 。