您的位置:首页 > 职场人生

黑马程序员——java复习总结——泛型和Map

2015-08-14 11:29 501 查看
------- android培训java培训、期待与您交流! ---------

一、泛型

1.1 泛型的概念

泛型是JDK1.5版本以后的新特性,用于解决安全问题,是一个安全机制。

好处:

1、 将运行时期出现的问题ClassCastException,转移到了编译时期,方便与程序员解决问题,让程序问题减少,安全。

2、 避免了强制转换的麻烦

1.2 泛型的格式

通过<>来定义要操作的引用数据类型。通常在集合框架中很常见,只要见到<>就要定义泛型。

其实<>就是用来接收类型的。

当使用集合时,将集合中要存储的类型作为参数传入集合即可。

泛型的使用有两种格式,泛型类和泛型方法。

泛型类:在整个类中有效。

泛型方法:定义在方法上使用。为了让对不同方法操作不同类型,而且类型还不确定时,就将泛型定义在方法上。

特殊之处:静态方法中的参数不可以用泛型,如果要使用泛型,就要将泛型定义在该方法上。

1.3 泛型限定

当不明确接受类型时,可以用通配符<?>表示,通配符也可以理解为占位符。

泛型的限定有两种,向上限定和向下限定:

向下限定<? extends E> 可以接受到的类型是E或者E的子类,上限。

向上限定<? super E> 可以接受的类型是E或者E的父类,下限。

但是,不论是使用向下限定还是使用向上限定,在使用比较器时,都是使用父类的方法,传入子类进行比较,因为子类继承了这些方法,最好不用子类特有的方法进行比较。

二、Map集合

2.1 map集合的特点

该集合存储键值对,是一对一队的存储的,而且保证键的唯一性。

2.2 map集合的方法

2.2.1 添加

put(K key,Vvalue); 添加一队键值对到Map集合,如果该键已经存在,那么会覆盖原有的值,返回被取代的值。

putAll(Map<?extend K>,? extends V> m); 添加一个指定的Map集合到map集合

2.2.2 删除

chear(); 清空集合

remove(Objectkey); 移除指定的键值对

2.2.3 判断

containsValue(Objectvalue); 判断值是否存在

containsKey(Objectkey) 判断键是否存在

isEmpty() 判断集合是否为空

2.2.4 获取

get(Object key) 通过键获取值,没有时返回空

size() 获取集合大小

value() 获取的是Collection集合,它里面存放的是所有的值。

2.2.5 map集合的取出方式

entrySet();返回的是包含映射关系的Set集合,类型是Map.Entry。可以通过Set集合的迭代方式,将Set集合中所有的Entry值,然后可以通过Entry特有的方法getkey和getvalue方法获取键和值。

keyset();

将map中所有的键存入Set集合中,因为Set集合有迭代器,所以可以通过迭代的方法获取出所有的键,再通过get方法,获取每一个键对应的值。返回的是Set集合。里面存放的是key。

如下,就是一个存储学生的综合例子,使用了HashMap和TreeMap,并且使用了entrySeet和keySet取出方法:











2.3 Map集合的子类

Hashtable,此类实现了一个hash表,该hash表将映射到相应的值,任何非null的对象都可以用作键或值。用作键的对象必须实现了hashCode和equals方法。在多线程的情况下,他说同步的。

HashMap:此类实现了一个hash表,该hash表将映射到对应的值,允许使用null作为键和值。并且在多线程的情况下,是非同步的。

TreeMap:底层是二叉树数据结构,线程不同步的,可以用于给map集合中的键进行排序。

其实Map集合和Set集合很像,其实Set集合底层都是使用的Map集合。

2.4 工具类

2.4.1 Collections的 概念

Collections是集合框架中的工具类,里面都是静态方法,可以对List进行排序。

2.4.2 Collections中的方法

Collections中定义了许多方法,使用最多的就是静态方法。如:

sort():他可以对集合中的元素进行排序,使用的是compareTo方法,如果集合中的元素没有实现该接口,则可以手动传入一个比较器,也是可以进行比较的。

reverseOrder():强行逆转比较器,他可以直接作为参数传入,可以将原有的比较器反转,也可以将原有的比较器作为参数,放入括号内一同传入。

toArray():将集合变成数组

shuffle():将集合中的元素随机排放

因为集合是不同步的,所以Collections中有支持同步的方法,传入一个集合对象,就会返回一个相同的集合对象,并且是线程同步的。如synchronizedList(),synchronizedSet()等

2.4.3 ArrayList

ArrayList是集合中用于操作数组的工具类。它里面定义了许多操作数组的方法。

toString():可以将数组变成字符串。

asList():将数组变成集合。

将数组变成集合的好处:可以使用集合的思想和方法来操作数组中的元素,但是不可以操作集合的增删方法操作数组,因为数组是长度是固定的。

如果数组中的元素都是对象,那么转成集合时,集合中的元素就都是对象,如果数组中的元素都是基本类型,那么在转入集合时,会将数组作为一个对象传入集合。

2.5 高级for循环

语法:

for(数据类型 变量名:被遍历的集合){}

它可以对集合进行遍历,只能获取元素,但是不能堆元素进行集合操作。而迭代器除了遍历之外,还可以对remove集合中的元素。如果是ListIterator,则有更多方法操作集合。

高级for循环的局限性:必须要有一个被遍历的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: