黑马程序员_集合类

------- android培训java培训、期待与您交流! ----------


Map

   |--HashTable :底层数据结构为哈希表,不可以存入null键null值,该集合是线性同步;
   |--HashMap :底层是哈希表数据结构允许使用null键和null值,该集合是不同步的;
   |--TreeMap :底层是二叉树数据结构,线程不同步,可以给Map中的集合进行排序。
 
该集合存储键值对,一对一的往里存,而且保证键的唯一性;

Map集合常见操作:
添加:添加元素时,若出现相同的键,那么后边添加的值会覆盖原有键对应值。
put(K key,V value)
putAll(Map<? extends K,? extendsV> t)


删除:
clear():从此映射中移除所有映射关系;
remove(Object key):如果存在此键的映射关系,则将其从映射中移除;


判断:
containsValue(Object value):  如果此映射为指定值映射一个或多个键,则返回true。
containsKey(Object key):如果此映射包含指定键的映射关系,则返回true。
isEmpty()
获取:
get(Object key):返回此映射中映射到指定键的值,可以通过get方法返回值判断一个键是否存在,能过返回NULL来判断;
size(): 返回此映射中的键-值映射关系数。
values():返回此映射中包含的值的 collection视图。


JAVA代码实现如下:

package com.test.map;
import java.util.*;
public class MapDemo {

	public static void main(String[] args) {
		Map<String, String> param=new HashMap<String, String>();
		//添加元素,添加元素,若添加时出现相同的键,那么后添加的值会覆盖原有键对应的值,
		//并且put方法会返回被覆盖的值
		param.put("01", "java01");
		sop(param.put("01", "java"));
		param.put("02", "java02");
		sop(param);

		//删除元素
		//param.clear();
		param.remove("01");
		sop(param);
		//判断
		sop(param.containsKey("02"));
		sop(param.containsValue("java02"));
		sop(param.isEmpty());
		//获取
		param.put("03", null);
		sop(param.get("03"));//可以通过get方法的返回值来判断一个键是否存在,通过返回NULL来判断。
		

	}
	public static void sop(Object obj){
		System.out.println(obj);
	}

}

keySet():返回此映射中包含的键的 set 视图;
 将map中所有的键存入到set集合,因为set具备迭代器,可以用迭代方式取出所有的键,再根据get方法获取每一个键对应的值.

JAVA代码示例如下:

package com.test.map;

import java.util.*;
public class MapDemo2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, String> param=new HashMap<String, String>();
		param.put("01", "java01");
		param.put("02", "java02");
		param.put("03", "java03");
		
		//使用Map集合中的keySet方法获取映射中包含的键的 set 视图。
		Set<String> set=param.keySet();
		//使用Set集合获取迭代器
		Iterator<String> it=set.iterator();
		while(it.hasNext()){
			String key=it.next();
			//有了键之后,就可以使用Map集合的get方法获取对应的值。
			String value=param.get(key);
			System.out.println("key:"+key+" value:::"+value);
		}
	}
}


entrySet():返回此映射中包含的映射关系的 set 视图;
将Map集合中的映射关系存入到set集合中而这个关系的数据类型就是:Map.Entry,
Map.Entry中Entry也是一个接口,它是Map接口的一个内部接口。

package com.test.map;
/**
 * entrySet() 方法
 * @author jessiFan
 *
 */
import java.util.*;
public class MapDemo3 {

	public static void main(String[] args) {
		Map<String, String> param=new HashMap<String, String>();
		param.put("01", "java01");
		param.put("02", "java02");
		
	      Set<Map.Entry<String, String>>  entrySet=param.entrySet();
	      Iterator<Map.Entry<String, String>> it=entrySet.iterator();
	      while(it.hasNext()){
	    	  Map.Entry<String, String> me=it.next();
	    	  String key=me.getKey();
	    	  String value=me.getValue();
	    	  System.out.println("key::"+key+"value:::"+value);
	      }
	}
}

Map练习:

1、 每一个学生都有对应归属地,学生Student,地址为String,学生属性:姓名、年龄。注意:姓名和年龄相同视为一个学生,保证学生的唯一性

package com.test.map;

import java.util.*;
public class MapTest {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Student, String> map=new HashMap<Student, String>();
		map.put(new Student("java01", 10), "武汉");
		map.put(new Student("java02", 20), "杭州");
		map.put(new Student("java03", 30), "上海");
		
		Set<Student> set=map.keySet();
		Iterator<Student> it=set.iterator();
		while(it.hasNext()){
			Student key=it.next();
			String value=map.get(key);
			System.out.println(key+"::"+value);
		}
	}
}


class Student implements Comparable<Student>{
	private String name;
	private int age;
	Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	
	public int compareTo(Student s){
	  int num=new Integer(this.age).compareTo(new Integer(s.age));
	  if(num==0)
		  return this.name.compareTo(s.name);
	return num;
	}
	
	public int  hashCode(){
		return name.hashCode()+age*34;
	}
	
	public boolean equals(Object obj){
		if(!(obj instanceof Student))
			throw new ClassCastException("类型不匹配");
		Student s=(Student)obj;
		return this.name.equals(s.name)&& this.age==s.age;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	public String toString(){
		return name+":"+age; 
	}
}



2、 对学生对象姓名升序排序,因为键值对存储,所以要用TreeMap

JAVA代码实现如下:

package com.test.map;

import java.util.*;
/**
 * 按学生姓名排序
 * @author jessiFan
   *
 */
public class MapTest2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Student, String> param=new TreeMap<Student, String>(new myComparator());
		param.put(new Student("lisi01",23), "shanghai");
		param.put(new Student("lisi022",22), "beijing");
		param.put(new Student("lisi03",18), "wuhan");
		param.put(new Student("lisi01", 40),"hangzhou");
		
		
		 Set<Map.Entry<Student, String>> entryset = param.entrySet();
		 Iterator<Map.Entry<Student, String>> it=entryset.iterator();
		 while(it.hasNext()){
			 Map.Entry<Student, String> me=it.next();
			 Student stu=me.getKey();
			 String adr=me.getValue();
			 System.out.println(stu+"::"+adr);
		 }
	}
}

class myComparator  implements Comparator<Student>{
	
	@Override
	public int compare(Student o1, Student o2) {
		// TODO Auto-generated method stub
		int num=o1.getName().compareTo(o2.getName());
		if(num==0)
			return new Integer(o1.getAge()).compareTo(o2.getAge());
		return num;
	}
	
}

3、  字母在字符串中出现的次数,打印格式为: a()b()c()
package com.test.map;
/**aabbccdd
 * 字母中字符串出现的次数。
 * @author jessiFan
 *
 */
import java.util.*;
public class MapTest3 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		charCount("aabbccdd");

	}
	public static void charCount(String str){
		char[] ch=str.toCharArray();
		Map<Character,Integer> param=new TreeMap<Character, Integer>();

		for(int i=0;i<ch.length;i++){
			Integer value=param.get(ch[i]);
			if(value==null)
				param.put(ch[i], 1);
			else {
				value=value+1;
				param.put(ch[i], value);
			}
		}
		System.out.println(param);
		StringBuilder sb=new StringBuilder();
		Set<Character> keySet=param.keySet();
		Iterator<Character> it=keySet.iterator();
		while(it.hasNext()){
			Character key=it.next();
			Integer value=param.get(key);
			sb.append(key+"("+value+")");
		}
		
		System.out.println(sb.toString());
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值