JAVA 15 (Map)
Map集合:该集合存储键值对,一对一对往里存,并且要保证键的唯一性。只要方法
当数据直接存在着映射关系,就要使用map集合。
1,添加。
put(K,V)
putAll()
2,删除。
remove(Objiect key)
clear()
3,判断。
boolean containsKey()
boolean containsValue()
isEmpty()
4,获取。
v get(Object key)
size()
values():返回所有值的集合
map集合取出的两种方式:
keySet():将map中所有键存入set集合(返回值为set类型),因为set具有迭代器,所以可以利用迭代器取出所有键,来获取每一个值。详见例二。
Set<Map.Entry<k,v>> entrySet():将map集合中的映射关系取出存入到set中,用迭代器,迭代器读取的值为:
Map.Entry 其实Entry也是一个接口,他是Map借口中的内部接口,
详见例三:
Map.Entry<String, String> me = it.next(); //迭代器指定好了泛型。
String value = me.getValue();
String key = me.getKey();
sop("key:"+key+" value:"+value);
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null作为键或值。该集合是 线程同步的。
|--HashMap:底层是哈希表数据结构,允许使用null值和键,该集合是不同步的,效率高。
|--treeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。
Map扩展知识:
Map被使用是因为具有映射关系。
常见方法举例:
import java.util.*;
public class Test {
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("01","zhangsan1");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
//判断
sop(map.containsKey("88"));
sop(map.containsKey("01"));
//删除
//sop("remove:"+map.remove("01"));
//获取
sop("get:"+map.get("03"));
//获取所有值,返回类型为集合
sop("value"+map.values());
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
例二:
import java.util.*;
public class Test {
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("01","zhangsan1");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
Set<String> keyset=map.keySet();
Iterator<String> it =keyset.iterator();
while(it.hasNext())
{
String key=it.next();
sop("value:"+map.get(key));//有了键就可以通过get()方法获取值
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
例三:
import java.util.*;
import java.util.Map.Entry;
public class Test {
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
//添加元素
map.put("01","zhangsan1");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
Set<Map.Entry<String, String>> et = map.entrySet();
Iterator<Map.Entry<String, String>> it =et.iterator();
while(it.hasNext())
{
Map.Entry<String, String> me = it.next();
String value = me.getValue();
String key = me.getKey();
sop("key:"+key+" value:"+value);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
例三:
定义要添加到集合中对象的时候,需要复写一些方法。
import java.util.*;
import java.util.Map.Entry;
public class Test {
public static void main(String[] args)
{
TreeMap<Student,String> tm = new TreeMap<Student,String>(new Com());
tm.put(new Student("alisi1",21), "shanghai");
tm.put(new Student("alisi1",21), "shanghai");
tm.put(new Student("blisi4",24), "shanghai");
tm.put(new Student("clisi6",26), "shanghai");
tm.put(new Student("dlisi2",22), "shanghai");
tm.put(new Student("elisi3",23), "shanghai");
tm.put(new Student("flisi5",25), "shanghai");
Set<Map.Entry<Student, String>> en = tm.entrySet();
Iterator<Map.Entry<Student, String>> it =en.iterator();
while(it.hasNext())
{
Map.Entry<Student, String> me =it.next();
Student stu=me.getKey();
String adr=me.getValue();
sop(stu+"..."+adr);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Student implements Comparable<Student>
{
private String name;
private int age;
public int compareTo(Student s) //添加到TreeSet TreeMap时会用到的方法
{
int num = new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public String toString() //getKey的时候会执行的方法
{
return name+":"+age;
}
public int hashCode() //添加到HashSet HashTree时会执行到
{
return name.hashCode()+age*34;
}
/*
public boolean equals(Object obj) //添加到集合类型中会检查是否重复元素的时候会用到
{
if(!(obj instanceof Student))
throw new RuntimeException();
else
Student s =(Student)obj;
return this.name.equals(s.name)&&this.age=s.age;
}*/
}
class Com implements Comparator<Student> //集合自身的比较器
{
public int compare(Student st1,Student st2)
{
int num = st1.getName().compareTo(st2.getName());
if (num==0)
return new Integer(st1.getAge()).compareTo(new Integer(st2.getAge()));
else
return num;
}
}
练习,获取字符串中每一个字母出现的次数:
利用字母和次数一一对应,并且是按字典序,所有选用TreeMap数据结构
import java.util.*;
import java.util.Map.Entry;
public class Test {
public static void main(String[] args)
{
String s="aadasjsdhfjsdhfiuasdasddsfds";
char a[] = s.toCharArray();
TreeMap<Character,Integer> mp = new TreeMap<Character,Integer>();
for(int x=0;x<a.length;x++)
{
if(mp.containsKey(a[x]))
{
int t=mp.get(a[x]);
t++;
mp.put(a[x], t);
}
else
{
mp.put(a[x], 1);
}
}
sop(mp);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}

浙公网安备 33010602011771号