第十三天(集合框架-续二)

来源:互联网 发布:梦里花落知多少 91 编辑:程序博客网 时间:2024/05/25 08:14

       哎,终于将那集合部分看完了。发现越来越不懂了,包括其中有个栈的部分,虽然它说很重要,我却发现不了哪儿重要,我不懂栈……这个以后再说。现在没时间了,过个十来天要考英语4级,在过个三十多天又要期末考,实在分不了心。一切顺其自然。

2011-06-02(集合框架)
14、Map接口。也可称为键/值集合、映射集,因为实现该接口的集合中,元素是成对出现的——一个称为键(Key),一个称为值(Value)。键对象唯一对应一个值对象,且键在Map中是不能重复出现的。另外,映射集中存放的对象都是键和值的引用。Map中声明了如下方法:
(1)void clear():清除Map中所有的映射关系;
(2)boolean containsKey(Object key):测试是否有键为key的对象;
(3)boolean containsValue(Object value):测试是否有值为value的对象;
(4)Object get(Object key):返回键key对应的值对象;
(5)boolean isEmpty():测试否存在映射关系;
(6)Object put(Object key,Object value):将键key和值value添加到Map中,并关联。如果该key已存在,则只将value添加其中并与相同的key关联;
(7)void putAll(Map t):将映射集t中的键对象和值对象逐个添加到方法所在映射集中;
(8)Object remove(Object key):移除键key所对应的值,并返回对应的值对象;
(9)int size():返回键值对个数。
15、HashMap类。Map的常用实现之一,其中排序不是Ordered也不是Sorted,是通过键计算哈希码来决定值的储存。键和值允许为null。构造方法:
                                                                                          public HashMap() 和 public HashMap(Map)
16、Hashtable类(注意t为小写)。与HashMap基本相同,不同的是Hashtable性能差一点,无特殊要求一般选HashMap。
17、LinkedHashMap类,与LinkedHashSet类相同,都是一个Ordered类型的Map,按插入集合的顺序排序。在插入删除方面比HashMap略差,但历遍效率略高。
18、SortedMap接口与TreeMap类
I、SortedMap接口。SortedMap与SortedSet类似,都是一个Sorted型的Map。所以也要重写Comparable中的compareTo方,或Comparator中的compare方法。其声明的方法与SortedSet大致一样:
(1)Object firstKey():返回SortMap中的第一个对象,也就是键最小的键对象。对应的有lastKey()方法;
(2)SortMap headMap(Object toKey):返回键对象小于toKey(不包括)的所组成的SortedMap。对应的有SortedMap tailMap(Object fromKey)(这里截取时包括fromKey)和它们的结合体:SortedMap subMap(Object fromKey,Object toKey)。
II、TreeMap类。是SortedMap的实现,具有SortedMap和Map的性质和方法。构造方法:
                                   public TreeMap() ; public TreeMap(SortedMap s) ; public TreeMap(Map c) ; TreeMap(Comparator comparetor)
19、映射集的历遍。映射集地历遍需要将其中的键或值装进Set和Collection中,而后使用迭代器迭代输出。将键值抽出的方法:
                                                    public Set keySet(); public Collection values();
举个例子:
20、总结。前面学习了多个接口、类,都有储存对象的引用的功能,它们以列表/集合、Ordered/Sorted、映射/集合等区分,亦有部分是功能相似。首先,大的分为Collection接口和Map接口:
I、Collection接口,有两个字接口:List、Set:
(1)List接口:有索引,Ordered型。它的实现有ArryList、Vector、LinkedList。功能方法差不多,性能有略有差异;
(2)Set接口:无索引,有一个子接口两个实现类。子接口为SortedSet,这个接口有一个实现:TreeSet类。
i、HashSet类,非Ordered非Sorted,即按哈希码排,所以想用它来储存对象的引用并且想按特定顺序排列,必须重写equals、hashCode方法;
ii、LinkedHashSet类,按插入顺序排序;
iii、TreeSet类,Sorted型,可按Comparable中的compareTo也可按Comparator中的compare排序。
II、Map接口,有一个子接口三个实现类。这个接口的设立其实可以看作是有索引的集合,只是索引是自己定义的,而非List中是以自然数为索引,更为灵活。子接口SortedMap,这个接口有一个实现:TrssMap类。
(1)HashMap类,非Ordered非Sorted,即按哈希码排;
(2)Hashtable类,与Hashtable基本相同,但一般用HashMap;
(3)LinkedHashMap类,Ordered型,按插入顺序储存;
(4)TrssMap类,Sorted型,按键的天然顺序排列,可人为地定义Comparator,改变排列法则。
21、栈在java中的实现。这一部分需要java数据结构的支持,虽然明白有这么个方法,不明白其用法,写了也无用,略过。
22、Collections类中的静态方法。这个Collections有别于Collection接口,性质与Math类相似,调用其中的方法可实现对集合元素的操作,这里的集合是指Collection接口的所有实现,包括List和Set。
I、排序。提供了两个方法,一种按升序,要求实现了Comparable接口;一种按指定比较器排序:
                                                                                        public static sort(List list)
                                                                                        public static sort(List list,Comparator c)
II、搜索。有两方法,返回所求元素的索引。要求List元素有可比性,搜索前List必须已排列。如果排序按比较器排序的,搜索的时候要加入所用得比较器(第二个方法):
                                                                                        public static int binarySearch(List list,Object key)
                                                                                        public static int binarySearch(List list,Object key,Comparator c)
III、打乱
public static void shuffle (List list)
IV、其他。
(1)public static boolean addAll(Collection c,Object...a):将a添加到指定集合c中。a可为一对象,也可为对象数组;
(2)public static copy(List dest,List src):将列表src复制到dest中。属于浅拷贝,即只拷贝引用,非元素内容。且要求dest.size()>=src.size();
(3)public static boolean disjoint(Collection c1,Collection c2):比较集合c1、c2是否有相同元素(是否相交)。没有(不相交)则返回true。
(4)public static void fill(List list , Object obj):将列表list中的元素全部替换为obj;
(5)public static int frequency(Collection c,Object o):返回集合c中元素o出现的次数;
(6)public static boolean replaceAll(List list ,T oldValue,T newValue):将list中所有值为oldValue的元素替换为newValue;
(7)public static void reverse(List list):将列表list序;
(8)public static void rotate(List list,int distance):将列表中元素整体平移distance个位置。如list=[1,2,3,4,5],执行Collections.rotate(list,2)后,变为:[4,5,1,2,3];
(9)public static void swap(List list,int i,int j)将列表list中索引i和j处的值交换。

原创粉丝点击