JavaSE16集合类(三)_第1页
JavaSE16集合类(三)_第2页
JavaSE16集合类(三)_第3页
JavaSE16集合类(三)_第4页
JavaSE16集合类(三)_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实现Map接口的集合类用来存储键-值映射对。JDK API中Map接口的实现类常用的有HashMapTreeMapHashtable(不常用)Map实现类中存储的键-值映射对是通过键来唯一标识,Map底层的键是用Set来存放的。所以存入HashMap中的映射对的键如果是自定义的类,应该重写hashCode()和equals()方法。常用String作为Map的键。1 Map接口中定义的一些常用方法: V put(K key, V value) /将指定的键-值对存入Map中 V get(Object key);/返回指定键所映射的值 V remove(Object key);/根据指定的键把此

2、键-值对从Map中移除。 boolean containsKey(Object key); /判断此Map是否包含指定键的键-值对。 boolean containsValue(Object value);/判断此Map是否包含指定值的键-值对。 boolean isEmpty();/判断此Map中是否有元素。 int size(); /获得些Map中键-值对的数量。 void clear(); /清空Map中的所有键-值对。 Set keySet(); /返回此Map中包含的键的Set集。 Collection values(); /返回此Map中包含的值的Collection集。值是可重复

3、的.2HashMap内部对键用Set进行散列存放。所以根据键去取值的效率很高。它是使用频率最高的一个集合。补充:封装类对象的hashCode()3Demo J1406班有若干个学生Student:(1,孙东旭,92; 2,文达,91;.)是按照学号排序的有序列表 J1407班有若干个学生Student:(1,张三,89; 2,李四,98;.)是按照学号排序的有序列表 .其他班级. 经常要通过班级的名字来查询按学号排序的学生信息, HashMapString,List; 创建map,存入至少两个班级的键值对信息,并遍历所有的键,根据键获取对应的List,并遍历出每个Student对象.Demo

4、学生属性:姓名,年龄。 注意:姓名和年龄相同的视为同一个学生,保证学生的唯一性。 1.定义学生Student类。 2.每一个学生Student 都有对应的所属城市(String)定义map容器。将学生类作为键,所属城市作为值存入。 3.根据指定的key获取map集合中对应的值。 4.遍历输出map集合中的键值对.Hashtable是JDK1.0就有了, HashMap是JDK1.2引入的,操作大多跟Hashtable相同,建议使用HashMap. Hashtable (注意大小写)是同步的(线程安全的);不能有null键,也不能有null值,否则运行时出空指针异常;基于陈旧的Dictionar

5、y类 ,有contains() 方法,用于测试此映射表中是否存在指定值,等同于HashMap类中的containsValue()(本类中也有)6Hashtable与HashMap的不同(笔试常考)Hashtable与HashMap的不同(笔试常考) HashMap 是不同步的(线程非安全的); 能存储最多一个null键,任意多个null值; 有containsKey(),containsValue()方法,没有contains() 方法 继承AbstractMapTreeMap内部使用红黑树结构对key进行排序存放,所以放入TreeMap中的key-value对的key必须是可排序的。 Tre

6、eMap()使用键的自然顺序构造一个新的、空的树映射。 TreeMap(Comparator comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序。8TreeMap练习 学生对象的排序规则为:先姓名升序排序,同名则再年龄升序排序。 每一个学生Student都有对应的所属城市。 1,定义学生Student类。 2,在场景类中定义TreeMap容器(用无参和有参的,匿名内部类)。将学生类作为键,所属城市作为值存入。 3,根据key获取TreeMap集合中的值。 4, 遍历输出TreeMap集合中的键值对.TreeMap练习 sdfgzxcvasdfxcvdf获取该字符串中

7、的每个字母出现的次数。希望打印结果a(1)c(2).按照字母自然顺序打印 提示:1.定义一个map集合,因为打印结果的字母有顺序,所以使用TreeMap集合。2.遍历字符数组。将每一个字母作为键去查map集合。如果返回null,将该字母和1存入到map集合中。如果返回不是null,说明该字母在map集合已经存在并有对应次数。那么就获取该次数并进行自增,然后将该字母和自增后的次数存入到map集合中,覆盖调用原来键所对应的值。3.将map集合中的数据变成指定的字符串形式返回。Map.Entry是Map中内部定义的一个static接口,专门用来保存keyvalue的内容。Map与Map.Entry1

8、1keykeyvaluevaluekeyvalue增加元素Map.EntryMap.EntryMap.EntryMap.Entry对于Map接口来说,其本身是不能直接使用迭代进行输出的,因为Map中的每一个位置存放的是一对值(keyvalue),而Iterator中每次只能找到一个值。所以如果非要使用迭代进行输出的话,要按照以下操作步骤完成:1.将Map的实例通过entrySet()方法变为Set接口对象2.通过Set接口的实例的iterator() 将Iterator实例化3.通过Iterator迭代输出,每个内容都是Map.Entry的对象4.通过Map.Entry进行keyvalue的分

9、离。getKey,getValueMap大多时候用于存放和查找,遍历输出属于少数操作。12Map.EntrySetEntry set = map.entrySet();IteratorEntry it = set.iterator();while(it.hasNext()Entry entry = it.next();Student key = entry.getKey();String value = entry.getValue();选择标准:存放要求 无序,无下标,不能随机访问Set 有序,有下标,可以随机访问List 不可重复-Set 可重复-List key-value对,较多存放和

10、查询,较少遍历Map读和改(插入删除)的效率 Hash*两者都最高 ArrayList读(指定下标随机访问)快,插入/删除元素慢 LinkedList读(指定下标随机访问)慢,插入/删除元素快14自定义泛型 自定义泛型和受限制的泛型目的是:在定义类时,就说明在使用类中的某些方法的时候,参数(或返回值)要使用一些类型(或其子类型) 当希望定义一个变量去接收某个类型或者其子类型时可以这样声明:自定义泛型public class MyGenericsprivate T field;/如果类上已经定义泛型T ,则可以直接使用public void setField(T f)this.field = f

11、;/获得f的类型System.out.println(f.getClass();public T getField()return this.field;/如果类上没有定义该泛型,则需要方法自行定义 void get2(M m)static void get3(P p)受限制的泛型让类型参数继承一个类或者实现接口import java.util.*; /限制了T必须是List或者它的子类型,不要用implements关键字class MyGenerics/将来在擦除T的时候,必须是List或其子类型private T field;public void setField(T f)this.fi

12、eld = f;/获得f的类型System.out.println(f.getClass();public T getField() return this.field;public static void main(String uu)MyGenerics mm1 = new MyGenerics();MyGenerics mm2 = new MyGenerics();MyGenerics mm3 = new MyGenerics(); /error受限制的泛型 ArrayList list = new ArrayList();/error MyGenerics g1; g1 = new M

13、yGenerics();/ok g1 = new MyGenerics();/ok g1 = new MyGenerics();/ok受限制的泛型 static void m1(List l). 不能传入List static void m2(List l). 可以传入List static void get2(List kList)。 1.必须在方法头部显示定义泛型K,2.无需对象造型可以直接get static void get1(List list)。 1.无需定义泛型类型,2.使用时需要显式进行对象造型受限制的泛型 static void method(Collection a)/是对

14、的一种简化,如果是方法上定义的泛型,用?可以避免使用在方法头部。但不能自动造型,不能直接使用子类中的新增方法。受限制的泛型 T类型或其父类类型,在定义Comparator实现类时可以指定Person类型,并将其传入TreeSet. 这样可以向Set中存储使用同样比较规则的Person的子类Student,Teacher对象, TreeSet(Comparator comparator)受限制的泛型TreeSet set = new TreeSet(new Comparator() Overridepublic int compare(Person arg0, Person arg1) retu

15、rn 0;);导出项目代码 在java工程上点鼠标右键 选择Export(导出) 在General下面找到File System 点击To directory右侧的Browse按钮选择保存的路径 Finish Collection接口 Iterator接口 Comparable接口(自然顺序比较,TreeSet,TreeMap)、Comparator接口(自定义比较器, TreeSet,TreeMap) Set、List、Map接口 Collections类 ArrayList、LinkedList、Vector类 HashSet、LinkedHashSet、TreeSet类 HashMap、

16、Hashtable、TreeMap类 集合的泛型操作(JDK5.0) 用增强的for循环(JDK5.0)遍历Collection24 1.创建一个User类,有name,password两个成员变量。在主函数中使用for循环创建10个User对象,并对成员变量赋值,在for循环中把10个User对象加入到一个ArrayList对象中。然后再使用一个for循环从这个ArrayList对象中把User对象取出,并在屏幕上打印这10个User对象的成员变量。 2.使用Iterator对象取出存放在ArrayList中的User对象,重复上述试验。25 3.创建一个User类,包含name和passw

17、ord两个成员变量.向一个ArrayList对象添加5个User对象,这5个User对象的成员变量的值分别为name=1,password=a, name=2,password=b, name=3,password=c, name=4,password=d, name=5,password=e。然后创建一个User对象,这个User对象的成员变量为name=3,password=c,然后使用contains方法测试这个对象是否包含在ArrayList对象中。26 4.重写上题中的User对象的equals方法,在方法体中编写的代码判断两个User对象的成员变量,所有的成员变量相等则返回true

18、,否则返回false,重复上题的试验。contains方法 当且仅当此列表包含至少一个满足 (o=null ? e=null : o.equals(e) 的元素 e 时,则返回 true。 5将3题中的contains函数换为indexOf函数,重复3题,4题的试验276.基于上题的试验,在向ArrayList中存放对象时,使用以下代码向集合中添加对象User user = null;ArrayList arr = new ArrayList();for(int i = 0 ; i+ ;i10)user = new User();=new Integer(i).toString();user.password=new Integer(i).toString();arr.add(user);然后使用Iterator对象取出ArrayList对象中的所有User对象,并打印每一个User对象的成员变量,观察结果。28 7.创建一个HashMap对象,向这个对象中加入5个键值对。遍历这个HashMap对象,打印出所有的键值对,并比较加入的键值对顺序和打印出的键值对的顺序是否相同 8.创建一个HashSet对象,向这个对象中加入两个完全一样的String对象。编译运行此程序,观

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论