黑马程序员—java基础_Map集合

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

1.Map集合:该集合存储键值对,一对一往里面存,保证键的唯一性。

常用操作:

(1)添加:put(K key,V value);putAll(Map<? extends K,? extends V> m)

(2)删除:clear();remove(Object key)

(3)判断:containsValue(Object value);containsKey(Object key);isEmpty()

(4)获取:get(Object key);size();values();entrySet();keySet()

Map集合框架:

Hashtable:底层是哈希表数据结构,不可存入null键null值,线程同步,jdk1.0效率低。

HashMap:底层是哈希表数据结构,允许使用null键null值,线程不同步,将Hashtable取代,jdk1.2效率高

TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。

2.Map集合的两种取出方式:

(1)Set<k> keySet:将Map中所有的键存入的Set集合中,因为set具备迭代器,可以用迭代方式取出所有键,在根据get方法获取每一个键对应的值。

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

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

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

(2)Set<Map.Entry<key,v>> entrySet:将Map集合中的映射关系存入到Set集合中,这个关系的数据类型就是Map.Entry。Entry其实就是Map中的一个static内部接口,关系属于Map集合中的一个内部事物,可以直接访问Map集合中的元素。

Map<String,String> map = new HashMap<String,String>();
//将Map集合中的映射关系取出。存入到Set集合中。
Set<Map.Entry<String,String>> entrySet = map.entrySet();

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

while(it.hasNext())
{
<span style="white-space:pre">	</span>Map.Entry<String,String> me = it.next();
<span style="white-space:pre">	</span>String key = me.getKey();//获取键
<span style="white-space:pre">	</span>String value = me.getValue();//获取值

<span style="white-space:pre">	</span>System.out.println(key+":"+value);
}
3.TreeMap练习:对学生对象的年龄进行升序排序

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapTest {

	/**
	 * 每一个学生都有对应的归属地。
	 * 学生Student,地址String。
	 * 学生属性:姓名,年龄。
	 * 注意:姓名和年龄相同的视为同一个学生,保证学生的唯一性。
	 * 对学生对象的年龄进行升序排序。
	 * 因为数据是以键值对形式存在的,所以要使用可以排序的Map集合。TreeMap。
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TreeMap<Student,String> tm=new TreeMap<Student,String>(new StuNameComparator());//TreeMap类传入新的比较方法
		
		tm.put(new Student("blisi3",23),"nanjing");
		tm.put(new Student("lisi1",21),"beijing");
		tm.put(new Student("alisi4",24),"wuhan");
		tm.put(new Student("lisi1",21),"tianjin");
		tm.put(new Student("lisi2",20),"shanghai");
		
		//将Map集合中的映射关系取出。存入到Set集合中。
		Set<Map.Entry<Student,String>> entrySet=tm.entrySet();
		//迭代
		Iterator<Map.Entry<Student,String>> it=entrySet.iterator();
		
		while(it.hasNext())
		{
			Map.Entry<Student, String> me=it.next();
			
			Student stu=me.getKey();//获取键
			String addr=me.getValue();//获取值
			System.out.println(stu+":::"+addr);
		}

	}
	
}
class Student implements Comparable<Student>{//学生类实现Comparable接口
	private String name;
	private int age;
	Student(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	public int compareTo(Student s)//覆盖compareTo方法
	{
		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()//覆盖hashCode方法
	{
		return name.hashCode()+age*34;
	}
	public boolean equals(Object obj)//覆盖equals方法
	{
		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;
	}
}

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;
	}
}
4.Arrays:用于操作数组的工具类,里面都是静态方法。

asList:将数组变成集合。可以使用集合的思想和方法来操作数组中的元素,不可以使用集合的增删方法,因为数组的长度是固定的。

Integer[] num={2,3,4};List<Integer> li=Arrays.asList();

如果数组中的元素都是对象。那么变成集合时,数组中的元素就直接转成集合中的元素;如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在。

5.Collections:集合框架的工具类,里面都是静态方法。

Collections和Collection区别:

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
Collections是集合框架中的一个工具类。该类中的方法都是静态的,提供的方法中有可以对list集合进行排序,二分查找等方法。

Collections.sort(List<> List):根据元素的自然顺序对指定列表进行升序排序

Collections.replaceAll(old,new):替换所有

Collections.reverse(List<> list):反转

Collections.swap(List<> list,int i,int j):交换位置

6.高级for循环

格式(数据类型 变量名:被遍历的集合或数组)

{}

对集合进行遍历,只能获取集合的元素,不能对集合进行操作。

高级for循环必须有被遍历的目标。

ArrayList<String> al = new ArrayList<String>();

al.add("abc");

al.add("aaa");

for(String s : al)

{

System.out.println(s);

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值