Map集合
//特点 存储的键值对(键映射到值的对象 一个映射不能包含重复的键
//每个键最多只能映射一个值)
//Map和Collection的区别
//Collection 只能存单一的元素 单列集合
//Map 双列集合
//基本功能
//添加功能
// V put(K key,V value):添加键和值元素
//删除功能
// V remove (Object Key) 删除指定的键
// Void clear():暴力删除
//判断 功能:
//Boolean ContainsKey(Object key)判断是否包含指定的键
//Boolean ContainsValue(Object value)判断是否包含指定的值
//Boolean isEmpty();判断集合是否为空
//int size() 获取键值对个数
//获取功能
//V get(Object key);根据键获取值
//SetKeySet() 获取所有键的集合
//Collection values获取所有的值的集合
//Set<Map.Entry<K,V>>entrySet();获取键值对象
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapCode {
public static void main(String[] args) {
//创建map集合
Map<String,String> map=new HashMap<String,String>();
//添加元素
//键如果在Map出现第一次返回null
//键如果重复了 后面值会覆盖前面的 返回时以前的值 赵敏
map.put(" 梁西华","大华");
map.put("杰瑞","汤姆");
map.put("米奇","米妮");
map.put("蓝皮鼠","大脸猫");
map.put("张无忌","赵敏");
map.put("张无忌","周芷若");//会把赵敏覆盖
//输出没有固定的顺序
//删除返回对应键值 而且 键值和键都会删除
System.out.println("删除后:"+map.remove("杰瑞"));
//删除后:汤姆
System.out.println(map.containsKey("米奇"));
System.out.println(map.containsValue("大脸猫"));
System.out.println(map.get("米奇"));
//米妮
System.out.println(map.get("周琦"));
//null
System.out.println(map);
//获取所有的键放入Set set中
Set<String> set=map.keySet();
//增强for 遍历set中的键
for(String key:set) {
//拿键获取值
String value=map.get(key);
System.out.println(key+"----"+value);
//达到一个遍历的结果
}
//另一种遍历方式 Set<Map.Entry<K,V>>entrySet();获取键值对象
//不太用 没上面好用 了解就行
//Collection<V> values() :获取所有的值的集合
Collection<String> val=map.values();
for(String va:val) {
System.out.println(va);
}
}
}
//}
HashMap集合
底层基于哈希表 不保证顺序恒久不变
package Map;
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
//创建一个HashMap集合对象
HashMap<Integer,String>hm=new HashMap<Integer,String>();
//添加元素
hm.put(4,"美国");
hm.put(6,"日本");
hm.put(9,"德国");
hm.put(4,"英国");
hm.put(6,"法国");
//遍历
Set<Integer> set=hm.keySet();
for(Integer key:set) {
String value=hm.get(key);
System.out.println(key+" "+value);
}
}
}
//4 英国 覆盖了美国
//6 法国
//9 德国 顺序也不保持不变
Hashmap 与自定义类的两种情况
情况一
package Map;
import java.util.HashMap;
import java.util.Set;
public class MapStudent {
public static void main(String[] args) {
//创建HashMap集合对象
HashMap<String,Student> map=new HashMap<String,Student>();
//创建几个学生对象
Student s1=new Student("柯南",5);
Student s2=new Student("新一",18);
Student s3=new Student("小兰",19);
Student s4=new Student("基德",20);
Student s5=new Student("小五郎",40);
//添加元素
map.put("221",s1);
map.put("241",s2);
map.put("2231",s3);
map.put("2213",s4);
map.put("2211",s5);
//遍历
Set<String> set=map.keySet();
//增强for
for(String key :set) {
Student value=map.get(key);
System.out.println(key+"-----"+value.getName()+"-----"+value.getAge());
}
}
}
情况二
import java.util.HashMap;
import java.util.Set;
public class MapStudent1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建HashMap集合对象
HashMap<Student,String> map=new HashMap<Student,String>();
//创建几个学生对象
Student s1=new Student("柯南",5);
Student s2=new Student("新一",18);
Student s3=new Student("小兰",19);
Student s4=new Student("基德",20);
Student s5=new Student("新一",18);
//添加元素
map.put(s1,"1");
map.put(s2,"2");
map.put(s3,"3");
map.put(s4,"4");
map.put(s5,"5");
//遍历
Set<Student> set=map.keySet();
//增强for
for(Student key :set) {
String value=map.get(key);
//注意 要进行重写hashCode和equals
//小兰-----19-----3
//新一-----18-----5
//柯南-----5-----1
//新一-----18-----2
//基德-----20-----4
//没有覆盖掉
System.out.println(key.getName()+"-----"+key.getAge()+"-----"+value);
}
}
}
//重写后
//基德-----20-----4
//新一-----18-----5
//小兰-----19-----3
//柯南-----5-----
学生类就不给出了
LinkedHashMap :
哈希表:元素唯一
链表:有序性
TreeMap:
可以自己构造方法排序
import java.util.Comparator;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapdemo {
public static void main(String[] args) {
TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//比较年龄
int num=s1.getAge()-s2.getAge();
//年龄一样就比较名字
int num2=(num==0)?
(s1.getName().compareTo(s2.getName())):num;
return num2;
}
});
Student s1 = new Student("鸣人", 28) ;
Student s2 = new Student("樱木花道", 35) ;
Student s3 = new Student("藤原拓海", 35) ;
Student s4 = new Student("山治", 26) ;
Student s5 = new Student("比鲁斯", 38) ;
Student s6 = new Student("柯南", 35) ;
//添加元素
tm.put(s1, "火影") ;
tm.put(s2, "篮球") ;
tm.put(s3, "ae86") ;
tm.put(s4, "海贼") ;
tm.put(s5, "七龙珠") ;
tm.put(s6, "侦探") ;
//遍历
Set<Student> set=tm.keySet();
for(Student key:set) {
String value=tm.get(key);
System.out.println(key.getName()+"---"+key.getAge()+"---"+value);
}
}
}
//按年龄从小到大排序
山治---26---海贼
鸣人---28---火影
柯南---35---侦探
樱木花道---35---篮球
藤原拓海---35---ae86
比鲁斯---38---七龙珠
Arraylist中嵌套hashmap
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
public class ArrayListCludeHashMapTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个大集合
ArrayList<HashMap<String, String>> array =
new ArrayList<HashMap<String,String>>() ;
//第一个子集合
HashMap<String, String> hm1 = new HashMap<String, String>() ;
hm1.put("中国 ", "亚洲") ;
hm1.put("美国 ", "北美") ;
//添加到大集合中
array.add(hm1) ;
HashMap<String, String> hm2 = new HashMap<String, String>() ;
hm2.put("智利 ", "南美洲") ;
hm2.put("赞比亚", "非洲;") ;
array.add(hm2) ;
HashMap<String, String> hm3 = new HashMap<String, String>() ;
hm3.put("富士山", "日本") ;
hm3.put("西安", "陕西") ;
array.add(hm3) ;
//遍历集合
for(HashMap<String, String> hm :array) {
//通过hm对象 获取所有的键的集合
Set<String> set = hm.keySet() ;
//增强for
for(String key: set) {
//通过键或者值
String value = hm.get(key) ;
System.out.println(key+"---"+value);
}
}
}
}