`
javappx
  • 浏览: 9900 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

黑马程序员- JAVA/集合(4)

 
阅读更多

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

 
 
1602 集合----Map子类对象特点
 
 
 
/*
Map集合:该集合存储键值对时,一对对往里存,而且要保持键的唯一性
1。添加
put(K key,V value)
putAll(Map<? extends K,? extends V>m)
2。删除
clear()
remove(Object key)
3,判断
containKey(Object key)
containValue(Object value)
isEmpty()
4。获取
get(Object key)
size()
values()
 
entrySet()
keySet()
Map实现类
--HashMap:底层是哈希表数据结构,可以存入null值null键,该集合是不同步的Jdk1.2 效率高
--HashTable:底层是哈希表数据结构,不可以存入null值null键,该集合是线程同步的Jdk1.0 效率低
--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序
 
和Set很像
其实,Set底层就是使用了Map集合
 
*/
import java.util.*;

class MapDemo 
{
	public static void main(String[] args) 
	{
		Map<String,String> map = new HashMap<String,String>();//为什么Map无法直接实例化??
		
		//添加元素,如果出现添加时相同的键,那么后添加的值会覆盖原有的键对应的值,先返回null,后返回被覆盖的键值
		map.put("01","zhangsan1");
		map.put("02","zhangsan2");
		map.put("03","zhangsan3");

		System.out.println("containKey:"+map.containsKey("02"));
		//System.out.println("remove:"+map.remove("02"));//删除键后,返回键值

		System.out.println("get:"+map.get("02"));
		//可以通过get方法的返回值,判断一个键是否存在


		//获取map集合中所有的值
		Collection<String> coll = map.values();
		System.out.println(coll);//返回map集合中所有的键值
		System.out.println(map);  

	}
}
 
 
 
1604 集合 Map KeySet
 
 
/*
map集合的两种取出方式:
1。Set<k> keySet:将map中所有的键存入到Set集合,因为Set具备迭代器
  所以可以迭代方式取出所有的键,再给句get方法,获取每一个键对应的键值
 
  Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出
 
 
2。Set<Map.Entry<K,V>>  entrySet()
将Map集合中的映射关系存入到Set集合中,映射关系的数据结构就是Map.Entry<k,v>
 
*/
 
import java.util.*;

class MapDemo2 
{
	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");

		//先获取map集合的所有键的Set集合,keySet()
		Set<String> keySet = map.keySet();

		//有了Set集合,就可以获取其迭代器
		Iterator<String> it = keySet.iterator();

		while (it.hasNext())
		{
			String key = it.next();
			//有了键可以通过map集合的get方法获取其对应的值
			String value = map.get(key);
			System.out.println("key:"+key+"--value:"+value);
		}



		
		Set<Map.Entry<String,String>> entrySet = map.entrySet();

		Iterator<Map.Entry<String,String>> it1 = entrySet.iterator();

		while (it1.hasNext())
		{
			Map.Entry<String,String> me = it1.next();
			
			String key = me.getKey();
			String value = me.getValue();

			System.out.println(key+":"+value);
		}
	}
}

/*
Map.Entry<k,v> 其实Entry也是一个接口,它是Map接口中的一个内部接口







*/
interface Map
{
	public static interface Entry
	{
		public abstract Object getKey();
		public abstract Object getValue();
	}
}

class HashMap implements Map.Entry
{
	public Object getKey()
	{}
	public Object getValue()
	{}
}
 
 
 
1606 MapTest Map练习
 
/*
需求:
每一个学生都有对应的属性;
学生Student,地址String。
学生属性:姓名,年龄
注意:姓名和年龄相同的视为同一个学生
保证学生的唯一性
 
思路:
1。描述学生
2。定义Map容器,将学生作为键,地址作为键值存入
3。获取map集合中的元素
 
 
*
/
import java.util.*;

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))
			return false;//throw new classCastException--抛出异常更为合理
		Student s = (Student)obj;
		return this.name.equals(s.name) && this.age == s.age;
	}
	public  void setName(String n)
	{
		name = n;
	}

	public  void setAge(int a)
	{
		age = a;
	}

	public String getName()
	{
		return name;
	}

	public  int getAge()
	{
		return age;
	}

	public String toString()
	{
		return name+":"+age;
	}
}
class MapTest 
{
	public static void main(String[] args) 
	{
		Map<Student,String> hm = new HashMap<Student,String>();

		hm.put(new Student("zhangsan01",20),"beijing");
		hm.put(new Student("zhangsan01",20),"tianjin");
		hm.put(new Student("zhangsan02",20),"shanghai");
		hm.put(new Student("zhangsan03",20),"nanijng");
		hm.put(new Student("zhangsan04",20),"wuhan");

		//第一种取出方式entrySet
		Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
		Iterator<Map.Entry<Student,String>> it = entrySet.iterator();

		while (it.hasNext())
		{
			Map.Entry<Student,String> me = it.next();

			Student stu = me.getKey();
			String addar = me.getValue();

			System.out.println(stu+":"+addar);
		}

		//第二种取出方式keySet
		Iterator<Student> it1 = hm.keySet().iterator();
		
		
		while (it1.hasNext())
		{
			Student stu = it1.next();
			String value = hm.get(stu);
			System.out.println(stu+":"+value);
		}

	}
}
 
 
 
1607 集合 TreeMap练习
 
 
 
/*
需求:对学生对象的年龄进行升序排序
 
因为数据是以键值形式存在的
所以要使用可以排序的Map集合,TreeMap
*
/
import java.util.*;

class MapTest2 
{
	public static void main(String[] args) 
	{
		Map<Student,String> hm = new TreeMap<Student,String>(new StuNameComparator());  //多了比较器,就以比较器为主,排序.

		hm.put(new Student("zhangsan04",25),"beijing");
		hm.put(new Student("zhangsan01",20),"tianjin");
		hm.put(new Student("zhangsan02",23),"shanghai");
		hm.put(new Student("zhangsan03",22),"nanijng");
		hm.put(new Student("zhangsan01",20),"wuhan");

		Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
		Iterator<Map.Entry<Student,String>> it = entrySet.iterator();

		while (it.hasNext())
		{
			Map.Entry<Student,String> me = it.next();

			Student stu = me.getKey();
			String addar = me.getValue();

			System.out.println(stu+":"+addar);
		}


	}
}

class StuNameComparator implements Comparator<Student>//参与比较对象
{
	public int compare(Student s1,Student s2)
	{
		int num = s1.getName().compareTo(s2.getName());

		if(num==0)
			return new Integer(s1.getAge()).compareTo(new Integer(s2.getAge()));
		return num;
	}
}
 
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics