复习day0728
Map集合及其子类、比较器、arrays类、collection类、泛型。
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<>();
hm.put(0, "c");
hm.put(1, "b");
System.out.println(hm.get(1));
System.out.println(hm);
}
返回类型 | 方法 | 描述 |
Object | get(Object key) | 根据key取得value |
Object | put(Obejct k,Object v) | 向集合中加入元素 |
void | clear() | 清除Map集合 |
boolean | isEmpty() | 判断集合是否为空 |
boolean | containsKey(Object object) | 判断指定的key是否存在 |
boolean | containsValue(Object value) | 判断指定的value是否存在 |
Set | keySet() | Map中所有的key的集合 |
Object | remove(Object key) | 根据key删除对应的value |
Collection | values() | 取出全部的value |
int | size() | 获得集合的长度 |
hashMap与hashTable区别
- 都是以hashSet作为保存key的数组
- hashTable的key与value不能为null
- 初始值hashMap 16 hashTable 11
- 增长量 hashMap*2 hashTable *2+1
- 安全性 hashMap线程不安全 hashTable线程安全
数据关系
一对一
Key与value都为指定对象保存指定值,根据key可以获取value值(是所有数据关系的根本)
HashMap<String, String> hm1=new HashMap<String, String>();
一对多
可以通过一个key获取多个值
HashMap<String, String[]> hm2=new HashMap<String, String[]>();
多对一
可以根据保存多个值的对象获取value值
HashMap<String[], String> hm3=new HashMap<String[], String>();
多对多
可以根据保存多个值的对象获取多个值
HashMap<String[], String[]> hm4=new HashMap<String[], String[]>();
Arrays工具类
数组工具类,提供了对数组操作的方法
int[] arr= {8,5,1,2,6,7,4,9,3};
//只能对数值类型进行自动排序
//因为其包装类实现了比较方法
Arrays.sort(arr);
for (int i : arr) {
System.out.print(i+" ");
}
Collections工具类
集合工具类,提供了对集合操作的方法
ArrayList<Integer> arr = new ArrayList<Integer>();
arr.add(9);
arr.add(5);
arr.add(8);
arr.add(7);
arr.add(4);
arr.add(6);
arr.add(3);
arr.add(1);
arr.add(2);
Collections.sort(arr);//自动排序
Collections.shuffle(arr);//打乱
System.out.println(arr);
PS:集合与数组工具类都可以对基本数值进行排序,是因为其内部实现了排序的规则,对于我们自定义的类型对象集合和数组而言,就不能直接使用排序方法进行排序。
比较器
用于对对象进行比较,比较两对象位置
对于比较器实现对象比较有两种形式:
第一种:用要比较的类实现comparable接口,实现compareTo方法
书写在要比较的对象的类中,只能为当前类所创建的对象使用
实现compareTo方法,实现的是当前对象与另一个对象进行比较,返回1代表当前对象应在另一个对象后面,返回-1代表当前对象应在另一个对象前面,返回0代表两个对象相等不进行位置改变
可以直接使用Arrays工具类或者Collections工具类 sort方法直接对保存实现了comparable接口的对象数组或集合对象进行排序
第二种:创建单独比较器类,实现comparator接口 实现compare方法
单独创建比较器,设置比较规则,针对以相同比较规则的对象进行比较
实现compare方法方法,传入两个要比较的对象,返回1代表第一个对象应在另一个对象后面,返回-1代表第一个对象应在另一个对象前面,返回0代表两个对象相等不进行位置改变
在使用时需要使用Arrays工具类或者Collections工具类 sort方法额外传入自定义比较器对象
对于排序的方式不同,具体选择哪种方法实现对象的比较也会有所不同
两种方式使用情景
当只对某一个类的对象进行排序时使用第一种,当对某一多个类进行排序比较时使用第二种
泛型
Java中的泛型,是指向list中添加统一类型的数据时,不会出现类型转换无法确定的问题
Jdk1.5以后推出的,在类创建对象时,为创建的对象指定的数据类型进行修改。
集合一旦定义了泛型类型,就只能向里面添加指定类型的对象,取出时不需要强制转换。
泛型的定义与使用
泛型大多使用大写的单个字母进行定义。<>包裹,定义多个泛型时使用,分隔。
- 书写在类名后
//1书写在类名后
//泛型在类中可以当做一个类来使用
//在创建对象时需要传入泛型
//这样对象中所有涉及到泛型的地方都会替换为指定类型
public class Genericity<A,B> {
public void a(A e) {
}
public void b(B e) {
}
}
- 书写在方法中
//2书写在方法中
//创建对象时不需要填入泛型
//一般在方法参数列表获取泛型的类型
public<E> E c(E e) {
//会自动识别传入数据的数据类型
//将方法中泛型进行替换
return e;
}