刨析源码,深层讲解 Java-集合框架( 六 )


4.4.4 代码演示
@Testpublic void test(){Comparator com = new Comparator() {//按照年龄从小到大排列@Overridepublic int compare(Object o1, Object o2) {if(o1 instanceof User && o2 instanceof User){User u1 = (User)o1;User u2 = (User)o2;return Integer.compare(u1.getAge(),u2.getAge());}else{throw new RuntimeException("输入的数据类型不匹配");}}};TreeSet set = new TreeSet(com);set.add(new User("Tom",12));set.add(new User("Jerry",32));set.add(new User("Jim",2));set.add(new User("Mike",65));set.add(new User("Mary",33));set.add(new User("Jack",33));set.add(new User("Jack",56));Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//User@621be5d1//User@573fd745//User@15327b79//User@4f2410ac//User@722c41f4//User@5b80350b}
@Testpublic void test1(){TreeSet set = new TreeSet();//失败:不能添加不同类的对象//set.add(123);//set.add(456);//set.add("AA");//set.add(new User("Tom",12));//举例一://set.add(34);//set.add(-34);//set.add(43);//set.add(11);//set.add(8);//举例二:set.add(new User("Tom",12));set.add(new User("Jerry",32));set.add(new User("Jim",2));set.add(new User("Mike",65));set.add(new User("Jack",33));set.add(new User("Jack",56));Iterator iterator = set.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}
四、Map接口 1. 概述
? Map接口与接口并列存在 。用于保存具有映射关系的数据:key-value —类似于高中的函数:y = f(x) 。
? Map中的key和value都可以是任何引用类型的数据 。
? Map中的key:无序的、不可重复的,使用Set存储所有的key,常用类作为Map的“键” —> key所在的类要重写()和()(以为例)
? Map中的value:无序的、可重复的,使用存储所有的value —>value所在的类要重写()
? 一个键值对:key-value构成了一个Entry对象 。Map中的entry:无序的、不可重复的,使用Set存储所有的entry
? key和value之间存在单向一对一关系,即通过指定的key总能找到唯一的、确定的 value
? Map接口的常用实现类:、、和 。其中,是Map接口使用频率最高的实现类 。
2. Map中定义的方法
? 添加、删除、修改操作:
方法描述
put( key, value)
将指定key-value添加到(或修改)当前map对象中
void (Map m)
将m中的所有key-value对存放到当前map中
( key)
移除指定key的key-value对,并返回value
void clear()
清空当前map中的所有数据
? 元素查询的操作:
方法描述
get( key)
获取指定key对应的value
( key)
是否包含指定的key
( value)
是否包含指定的value
int size()
返回map中key-value对的个数
()
判断当前map是否为空
( obj)
判断当前map和参数对象obj是否相等
( key, V )
当Map集合中存在这个key时,就使用这个key对应的value值,否则就使用默认值,意味着就算出现key to null这种键值对时,依然返回null而不是默认值
? 元视图操作的方法:
方法描述
Set ()
返回所有key构成的Set集合
()
返回所有value构成的集合
Set ()
返回所有key-value对构成的Set集合
? 总结:常用方法:
作用方法
添加
put( key, value)
删除
( key)
修改
put( key, value)
查询
get( key)
长度
size()
遍历
() / () / ()
2.1 代码演示
@Testpublic void test1(){Map map = new HashMap();//map = new Hashtable();map.put(null,123);}
@Testpublic void test2(){Map map = new HashMap();map = new LinkedHashMap();map.put(123,"AA");map.put(345,"BB");map.put(12,"CC");System.out.println(map);//{123=AA, 345=BB, 12=CC}}