Map接口
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
最常用的实现类是HashMap
HashMap map= new HashMap();
map.put("CN","中华人民共和国");//以key,value进行存储
map.put("UK","大不列颠联合王国");
map.put("US","美利坚合众国");
map.put("RU","俄罗斯联邦共和国");
System.out.println(map);```
运行:
{RU=俄罗斯联邦共和国, UK=大不列颠联合王国, CN=中华人民共和国, US=美利坚合众国}
常用方法
System.out.println(map.get("CN"));//用键获取值
map.put("US","美国");//修改 map.replace()修改方面基本一致
map.replace("CN","中国");
map.remove("US");//根据key删除
map.remove("RU","美利坚合众国");//key value都匹配时才能删除
System.out.println(map.size());//几组数据
System.out.println(map.containsKey("CN"));//是否包含key
System.out.println(map.containsValue("大不列颠联合王国"));//是否包含value
map.clear();//清空
if(map.isEmpty()) System.out.println("已经清空");//判断是否为空
遍历
for (Object o : map.entrySet()) {//entrySet键值对映射 Set集合
System.out.println(o);
}
for (Object o : map.keySet()) {//获取key集合 Set集合
System.out.println(o);
System.out.println(map.get(o));///通过键来遍历value
}
Collection values=map.values();//获取value的集合 Collection类型
for (Object value : map.values()) {
System.out.println(value);
}
Map底层
包含接口entry<K,V>
在HashMap中使用node节点实现了entry键值对
node节点用next属性实现了单向链表
map底层 entry+单向链表 (数组+单向链表)
当元素节点个数超过8时,转用红黑树进行底层存储
泛型
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性
本质是参数化类型
泛型集合可以约束集合内的元素类型
Java泛型中的标记符含义:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的java类型
S、U、V - 2nd、3rd、4th types
String name;
String gender;
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String toString() {
return "学员姓名是:"+name +";性别是:"+gender ;
}
HashMap<String,Student> map=new HashMap<>();
map.put("jack",new Student("李明","男"));
map.put("merry",new Student("小红","女"));
for (String s : map.keySet()) {
System.out.println(s + "对应的" + map.get(s));
}
自定义泛型
public class Teacher<T> {
String name;
String gender;
public Teacher(String name,String gender){
this.name=name;
this.gender=gender;
}
public void printT(T t){//自定义泛型
System.out.println(t);
}
public String toString(){
return "姓名是:"+name+"性别是;"+gender;
}
public static void main(String[] args) {
Teacher<Teacher> t=new Teacher<>("zzz","女");
t.printT(t);
}
}
Collections
Collections类定义了一系列用于操作集合的静态方法
Collections和Collection不同,前者是集合的操作类,后者是集合接口
Collections提供的常用静态方法
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
ArrayList<Integer> list = new ArrayList<>();
//泛型不能用基本数据类型
list.add(10);
list.add(3);
list.add(6);
list.add(8);
System.out.println(list);
Collections.sort(list);//升序
System.out.println(list);
实现降序
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer o1,Integer o2){
return o2-o1;//降序
}
});
System.out.println(list);
[10, 8, 6, 3]
实现一个类的对象之间比较大小,该类要实现Comparable接口
重写compareTo()方法
public class Student implements Comparable<Student>{//实现Comparable接口
int id;
String name;
String gender;
public Student(int id, String name, String gender) {
this.id = id;
this.name = name;
this.gender = gender;
}
public String toString() {
return "学号是:"+id+"学员姓名是:"+name +";性别是:"+gender ;
}
public int compareTo(Student o) {//重写compareTo方法
// return this.id-o.id;//升序
return o.id-this.id;//降序
}
}
List<Student> stuList = new LinkedList();
Student s1=new Student(8,"zzz","女");
Student s2=new Student(11,"ddd","男");
Student s3=new Student(14,"aaa","男");
Student s4=new Student(2,"ssss","男");
Student s5=new Student(5,"fff","男");
stuList.add(s1);
stuList.add(s2);
stuList.add(s3);
stuList.add(s4);
stuList.add(s5);
System.out.println(stuList);
Collections.sort(stuList);
System.out.println(stuList);