Map:一次添加一对元素。Collection 一次添加一个元素。 Map也称为双列集合,Collection集合称为单列集合。 其实map集合中存储的就是键值对。 map集合中必须保证键的唯一性。 常用方法: 1,添加。 value put(key,value):返回前一个和key关联的值,如果没有返回null.
2,删除。 void clear():清空map集合。 value remove(key):根据指定的key翻出这个键值对。
3,判断。 boolean containsKey(key): boolean containsValue(value): boolean isEmpty();
4,获取。 value get(key):通过键获取值,如果没有该键返回null。 当然可以通过返回null,来判断是否包含指定键。 int size(): 获取键值对的个数。 Map常用的子类: |--Hashtable :内部结构是哈希表,是同步的。不允许null作为键,不允许null作为值。 |--Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。 |--HashMap : 内部结构是哈希表,不是同步的。允许null作为键,null作为值。 |--TreeMap : 内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
3.重点方法keySet
4.重点方法entrySet
5.重点方法values
6.常见子类对象
7.HashMap存储自定义对象
package day19; import day18.TreePerson; public class Student { String name; int age; Student(String name,int age){ this.age=age; this.name=name; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public String toString() { return this.name+" --"+this.age ; } } public static void test2(){ HashMap<Student,String > hashMap =new HashMap<Student,String>(); hashMap.put(new Student("aaaa",29),"北京"); hashMap.put(new Student ("bbbb",24),"上海"); hashMap.put(new Student("cccc",23),"沈阳"); Set<Student> students=hashMap.keySet(); Iterator iterator =students.iterator(); while(iterator.hasNext()){ Student student =(Student) iterator.next(); System.out.println(" name :"+student.name+"age :"+student.age); } }
8.Tree存储自定义对象
package day19; import day18.TreePerson; public class Student implements Comparable { String name; int age; Student(String name,int age){ this.age=age; this.name=name; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Object o) { Student student =(Student )o; int temp=this.age-student.age; System.out.println(" temp="+temp); System.out.println(" 当前对象"+this +" 传入对象"+student); return temp; //第一种 } @Override public String toString() { return this.name+" --"+this.age ; } } public static void test3(){ TreeMap<Student,String > tm =new TreeMap<Student,String>(); tm.put(new Student("aaaa",29),"北京"); tm.put(new Student ("bbbb",24),"上海"); tm.put(new Student("cccc",23),"沈阳"); Set<Student> students=tm.keySet(); Iterator iterator =students.iterator(); while(iterator.hasNext()){ Student student =(Student) iterator.next(); System.out.println(" name :"+student.name+"age :"+student.age); } }Iterator <Map.Entry<Integer,String >> iterator = hm.entrySet().iterator();
public class MapTest { public static void main(String[] args){ // test(); // stringCount("abcdab"); // stringCount("a"); stringCount(null); stringCount("a"); stringCount(" "); stringCount("AAAbbbbccccccdddddAAAaaa"); } public static void test(){ HashMap<Integer,String> hm= new LinkedHashMap<Integer, String>();//key=7 value aaaa key=5 value bbbb key=2 value cccc key=4 value dddd // HashMap<Integer,String> hm= new HashMap<Integer, String>();// key=2 value cccc key=4 value dddd key=5 value bbbb key=7 value aaaa hm.put(7,"aaaa"); hm.put(5,"bbbb"); hm.put(2,"cccc"); hm.put(4,"dddd"); Iterator <Map.Entry<Integer,String >> iterator = hm.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<Integer ,String > map= iterator.next(); System.out.print (" key=" +map.getKey()+" value "+map.getValue()); } }输出结果: str ==null key =a value =1 -------------------- key = value =3 -------------------- key =A value =6 key =a value =3 key =b value =4 key =c value =6 key =d value =5 --------------------
思路: 字母和次数存在的映关系,TreeMap 可以保证唯一具备顺序a b,c,....
1. 因为操作的是字符,所以先将字符串转换为字符数组。
2.遍历字符数组,每一个字母比对Map 。
3.如果键值存在 times+1 存入,如果不存在则存入这个(key,1 );
4.排除不是字母的字符
char ch=chractor[index]; if(!(ch>='A'&&( ch<='Z')||(ch >='a'&&ch <='z') )){ continue; }
public static void stringCountByArray(String str){ HashMap<Character ,Integer> map =new HashMap<Character, Integer>(); if(str==null){ System.out.println(" str ==null "); return; } char[] chractor= new char[str.length()]; str.getChars(0,str.length(),chractor,0);//转为数组 for (int index=0;index<chractor.length;index++){ char ch=chractor[index]; if(!(ch>='A'&&( ch<='Z')||(ch >='a'&&ch <='z') )){ continue; } if( map.containsKey(chractor[index])){ int times=map.get(chractor[index]) ; map.put(chractor[index],times+1); }else{ map.put(chractor[index],1); } } Iterator<Map.Entry<Character,Integer>> iterator =map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<Character ,Integer> me= iterator.next(); System.out.println(" key ="+me.getKey()+" value ="+me.getValue()); } System.out.println(" --------------------"); } // TreeMap实现 public static void stringCountByTreeMap(String str){ TreeMap<Character ,Integer> map =new TreeMap<Character, Integer>(); if(str==null){ System.out.println(" str ==null "); return; } char[] chractor= str.toCharArray(); //str.getChars(0,str.length(),chractor,0);//转为数组 for (int index=0;index<chractor.length;index++){ char ch=chractor[index]; if(!(ch>='A'&&( ch<='Z')||(ch >='a'&&ch <='z') )){ continue; }//排除不是字母 if( map.containsKey(chractor[index])){ int times=map.get(chractor[index]) ; map.put(chractor[index],times+1); }else{ map.put(chractor[index],1); } } Iterator<Map.Entry<Character,Integer>> iterator =map.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry<Character ,Integer> me= iterator.next(); System.out.println(" key ="+me.getKey()+" value ="+me.getValue()); } System.out.println(" --------------------"); }