黑马程序员 JAVA基础-集合框架(二)

  ----------android培训java培训java学习型技术博客、期待与您交流!------------

 在此,分享一下自己学习JAVA的学习心得。有不对的地方请帮忙改正,也希望对想java的同学有帮助!

JAVA基础

        —集合框架(Map)


一、Map的概述


Map集合的特点:
   1.使用Key(键),Value(值)对的形式存储;
   2.内部会维护Key的唯一性。不管值是什么情况;
   
   
   Map接口中的一些方法:下面方法中的K和V:K:Key(键)(Object)
                              V:Value(值)(Object)


   1).添加功能:
    V put(K key,V value):将指定的值与此映射中的指定键关联(可选操作)。
   2).删除功能:
    V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
void clear():清空集合:
   3).获取功能:
    int size():返回此映射中的键-值映射关系数。
    V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
    Set<K> keySet():返回此映射中包含的键的 Set 视图。
    Collection<V> values():返回此映射中包含的值的 Collection 视图。
    Set<Map.Entry<K,V>> entrySet():返回此映射中包含的映射关系的 Set 视图。
   4).判断功能:
    boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true。
    boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回 true。
    boolean isEmpty():判断Map是否为空;

Java练习代码:

练习(一):使用Map集合的keySet遍历集合

public class Demo {
	public static void main(String[] args) {
		HashMap<String,String> map = new HashMap<String,String>();
		map.put("it001", "张三");
		map.put("it002", "李四");
		map.put("it003", "王五");
		
		Set<String> keySet = map.keySet();
		/*Iterator<String> it = keySet.iterator();
		while(it.hasNext()){
			String k = it.next();
			String v = map.get(k);
			System.out.println(k + "--" + v);
		}*/
		//增强for
		for(String s : keySet){
			System.out.println("键名:" + s + " 值:" + map.get(s));
		}
	}
}
    练习(二):使用entrySet()遍历集合
public class Demo {
	public static void main(String[] args) {
		HashMap<String,String> map = new HashMap<String,String>();
		map.put("it001", "张三");
		map.put("it002", "李四");
		map.put("it003", "王五");
		
		//获取键值对对象
		Set<Map.Entry<String,String>> entrySet = map.entrySet();
		
		for(Map.Entry<String,String> s : entrySet){
			String k = s.getKey();
			String v = s.getValue();
			System.out.println(k + "--" + v);
		}
	}
}

   HashMap和Hashtable的区别:
  
   1)、HashMap:所属Map接口;基于哈希表实现;
     允许使用null键和null值
   不保证线程安全,效率高
      从JDK1.2开始
   
   2)、Hashtable:所属Map接口;基于哈希表实现;
          不允许使用null做键或值
          线程安全的,效率低;
          从JDK1.0开始

HashMap案例:
HashMap<String,String>
HashMap<Integer,String>
HashMap<String,Student>
HashMap<Student,String>

     Java练习代码:

练习:HashMap<Student,String>

main方法:

public class Demo {
	public static void main(String[] args) {
		HashMap<Student,String> map = new HashMap<Student,String>();
		
		Student stu1 = new Student("张三",22);
		Student stu2 = new Student("李四",23);
		Student stu3 = new Student("王五",34);
		
		//填充map
		map.put(stu1, "it001");
		map.put(stu2, "it002");
		map.put(stu3, "it003");
		//键名不能重复
		//测试一:存储一个重复的引用
	//	Student stu4 = stu3;
	//	map.put(stu4, "it004");
		//测试二:存储一个新的对象,但里面的值是一样的;
		Student stu4 = new Student("王五",34);
		//重写hashCode()和equals()方法后,下面的键将不能存入,新值会替换原值;
	//	map.put(stu4, "it004");//默认是可以存进去的。原因是没有重写Student的hashCode()和equals()方法
		//遍历
		Set<Student> keySet = map.keySet();
		for(Student stu : keySet){
			System.out.println("键:" + stu.getName() + "," + stu.getAge() + 
									" 值:" + map.get(stu));	
		}
	}
}

     Student类:

public class Student implements Comparable{
	private String name;
	private int age;
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public int compareTo(Object o) {
		Student stu = (Student)o;
		//按年龄
		int num = this.age - stu.getAge();
		return num;
	}	
}


     LinkedHashMap类:Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。

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


Java练习代码:

练习:"aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)

public class Demo {
	public static void main(String[] args) {
		String str = "aababcabcdabcde";
		TreeMap<String,Integer> map = new TreeMap<>();
		//遍历字符串
		for(int i = 0;i < str.length() ; i++){
			char c = str.charAt(i);
			//先从集合中get,用当前的字符作为键。
			Integer v = map.get(String.valueOf(c));
			//判断v是否为null,如果为null,添加到集合;否则将v加1,之后再存入集合
			if(v == null){
				//新增
				map.put(String.valueOf(c), 1);
			}else{
				//将值加1,再存入集合
				map.put(String.valueOf(c), ++v);
			}
		}
		//封装字符串
		StringBuffer buf = new StringBuffer();
		Set<String> keySet = map.keySet();
		for(String s : keySet){
			buf.append(s);
			buf.append("(");
			buf.append(map.get(s));
			buf.append(")");
		}
		System.out.println(buf.toString());
	}
}


Collections类概述:
   
   此类完全由在 collection 上进行操作或返回 collection 的静态方法组成。
   
    public static <T> void sort(List<T> list):排序(根据元素的自然顺序 对指定列表按升序进行排序)
public static <T> int binarySearch(List<?> list,T key):在list中查找key对象
public static <T> T max(Collection<?> coll):根据元素的自然顺序,返回给定 collection 的最大元素。
public static void reverse(List<?> list):反转指定列表中元素的顺序。
public static void shuffle(List<?> list):使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的。








































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值