------- 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循环的局限性:必须要有一个被遍历的对象。