Java高级编程集合框架和泛型(二)
文章目录
一、Map的使用
以键值对形式进行储存数据
key不能重复
Map常用方法
方法名 | 说明 |
---|---|
Object put(Object key, Object val) | 以“键-值”对的方式进行存储 |
Object get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove(Object key) | 删除由指定的键映射的“键-值对” |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKey(Object key) | 如果存在由指定的键映射的“键-值对”,返回true |
/*
* key-value
* key唯一
* value 不唯一
*/
Map map = new HashMap();
map.put(1001, "张三");
map.put(1002, "李四");
map.put(1003, "王五");
//keySet返回键集合
Set keysets = map.keySet();
for(Object obj:keysets) {
System.out.println("key=="+obj);
System.out.println("value=="+map.get(obj));
}
//Collection values()返回值的集合
System.out.println("*****values*****");
Collection list = map.values();
for(Object obj:list) {
System.out.println("value=="+obj);//但只能value
}
//boolean containsKey(Object key)如果存在由指定的键映射的“键-值对”,返回true
boolean bool = map.containsKey(1003);
System.out.println("boolean=="+bool);
//根据键返回相关联的值,
System.out.println(map.get(1001));
System.out.println(map.size());
map.remove(1003);//删除
System.out.println(map.size());
//如果不存在指定的键,返回null
System.out.println(map.get(1003));
二、遍历方法
package com.hz.ch01;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Text03 {
public static void main(String[] args) {
Map map = new HashMap();
//赋值
map.put("cn", "中国");
map.put("us", "中国1");
map.put("ru", "中国2");
//键值对
System.out.println(map.get("cn"));
//增强循环
for(Object key:map.keySet()) {
System.out.println(key+"==="+map.get(key));
}
//迭代器
System.out.println("=========================");
Set keys = map.keySet();
Iterator it = keys.iterator();
while(it.hasNext()) {
Object k = it.next();
System.out.println(k+"==="+map.get(k));
}
}
}
三、泛型的定义
泛型接口: 先创建一个接口,在+<>,创建
泛型类:
泛型方法:
pubkic <k> String get(k a){
return "";
}
<? entends T>
:必须是T类或是子类,限制add功能,但是可以赋值list
<? super T>
:必须是T的父类或是当前类,限制get功能,get调用返回Object
四、泛型集合的使用
泛行:以数据类型作为参数传递
传递数据类型必须是引用数据类型:
int == Integer
char == Character
//定义泛型list
List<Integer> list = new ArrayList<Integer>();
//定义泛型set
Set<Long> set = new HashSet<long>();
//定义泛行map
Map<Sting,Integer> map = new HashMap<Sting,Integer>();
五、Collections算法类
(1)Collections类常用方法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class Text04 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(99);
list.add(77);
list.add(88);
list.add(44);
list.add(55);
list.add(66);
//获得最大数
int max = Collections.max(list);
//获得最小数
int min = Collections.min(list);
System.out.println("最大数"+max);
System.out.println("最小数"+min);
System.out.println(Arrays.toString(list.toArray()));
//升序排序
Collections.sort(list);
System.out.println(Arrays.toString(list.toArray()));
//查询指定内容是否存在 返回下标 小于0不存在
int i = Collections.binarySearch(list, 44);
System.out.println(i);
//降序排序
Collections.reverse(list);
System.out.println(Arrays.toString(list.toArray()));
}
}
(2)对象排序
让当前对象实现接口Comparable
重写方法compareTo(Object obj)
ackage com.hz.ch01;
public class Student implements Comparable<Student>{
public String name;
public int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int compareTo(Student o) {
if(this.age==o.age) {
return 0;//不交换
}else if(this.age>o.age) {
return 1;//交换位置
}else {
return -1;//不交换
}
}
}
.name = name;
this.age = age;
}
@Override
public int compareTo(Student o) {
if(this.age==o.age) {
return 0;//不交换
}else if(this.age>o.age) {
return 1;//交换位置
}else {
return -1;//不交换
}
}
}