黑马程序员——集合(三)

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

1、Map

Map也是一个集合,只是是以键值对存储的,常见的子类有Hashtable,HashMap,TreeMap。

Hashtable:是1.0版本,底层的数据结构是哈希表,键和值和不能是null值,线程安全,和HashMap比较,效率低。

HashMap:是1.2版本的,底层也是哈希表数据结构,键和值可以为空(null),线程不安全,效率比较高。更确切的说,HashMap是Hashtable的升级版。

TreeMap:可以排序,底层是二叉树。

2、基本操作

 [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() 

3、Map-keySet

Map集合的两种取出方式:
第一种keySet:将map中所有的键存入Set集合,因为Set具备迭代器,所有可以迭代方式取出所有的键,获取每一个键对应的值。

Map<String,String> map=new Map<String,String>();

map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
map.put("05","zhangsan5");

Set<String> keySet=map.keySet();

Iterator<String> it=keySet.iterator();

while(it.hasNext())
{
 String key=it.next();
 String value=map.get(key);
 输出键和值;
}

map集合的取出原理:将map集合转成set集合,再通过迭代器取出。

4、Map-entrySet

第二种entrySet:
Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,而这个关系的数据类型就是:Map.Entry。

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

Iterator<Map.Entry<String,String>> it=entrySet.iterator();
while(it.hasNext())
{
 Map.Entry<String,String> me=it.next();
 String key=me.geyKey();
 String value=me.getValue();
 这样就取出来了;
}

Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口。
interface Map
{
 public static interface Entry
 {
  public abstract Object getKey();
  public abstract Object getValue();
 }
}

5、练习

计算字符串中字符的个数,并且输出格式:a(1)b(3)c(4)….

思路:

   1.把字符串转化成字符数组后,然后开始遍历数组

   2.在遍历的时候,没读取一个字符,然后在集合中查看,如果存在则读取出来,然后数量加1,然后在存入里面如果没有,则添加里面,数量是1.

  3.输出格式,读取集合然后拼接字符串,利用StringBuffer。 

importjava.util.HashMap;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.Set;

public classMapDemo {

      public static void main(String[] args) {

           String str ="ahjdkdmkamkmixkxmcsnlasickdj";

           char[] cs = str.toCharArray();

           HashMap<Character, Integer> map= new HashMap<Character, Integer>();

           for (char c : cs) {

                 if (map.containsKey(c)) {

                      Integer count =map.get(c);// 取出此字符对应的数量

                      count++;// 数量++

                      map.put(c, count);// 然后重新添加里面,覆盖原来的

                 } else {

                      map.put(c, newInteger(1));// 开始数量为1

                 }

           }

 

           StringBuffer bu = new StringBuffer();

           Set<Character> set =map.keySet();

           Iterator<Character> it =set.iterator();

           while (it.hasNext()) {

                 Character c = it.next();

                 Integer count = map.get(c);

          bu.append(c).append("(").append(count).append(")");

           }

           System.out.println(bu);

      }

}

结果:

d(3)s(2)c(2)a(3)n(1)l(1)m(4)j(2)k(5)h(1)x(2)i(2)

6、模拟学校

模拟学校,然后读取学校中班级—学生信息,利用的是集合中嵌套集合

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Set;

 

class CollegeStudent {

private Stringnum;

private Stringname;

CollegeStudent(Stringnum, String name) {

      super();

      this.num =num;

      this.name =name;

}

public StringgetNum() {

      return num;

}

public StringgetName() {

      returnname;

}

public class Demo {

public staticvoid main(String[] agrs) {

      /* 学校 */

      HashMap<String,List<CollegeStudent>> bdxy = new HashMap<String,List<CollegeStudent>>();

      List<CollegeStudent>ruanjian = new ArrayList<CollegeStudent>();// 软件班

      List<CollegeStudent>jiying = new ArrayList<CollegeStudent>();// 计应班

      /* 把班级添加到学校中 */

      bdxy.put("ruanjian",ruanjian);

      bdxy.put("jiying",jiying);

      /*向班级中添加学生*/

      ruanjian.add(newCollegeStudent("110","zhansgan") );

      ruanjian.add(newCollegeStudent("111","lisi") );

      ruanjian.add(newCollegeStudent("112","王五"));

      jiying.add(newCollegeStudent("210","wangang") );

      jiying.add(newCollegeStudent("211","wangemi") );

      jiying.add(newCollegeStudent("212","xiaoqiang") );

      /* 遍历学校中的班级,然后读取班级中的学生信息 */

 

      Set<String>set = bdxy.keySet();// 获取班级名称集合

      Iterator<String>it = set.iterator();

      while(it.hasNext()) {

            StringClassName = it.next();

            List<CollegeStudent>ClassInfo = bdxy.get(ClassName);// 获得班级

            System.out.println(ClassName);

            show(ClassInfo);

      }

}

 

/* 输出班级的学生 */

public staticvoid show(List<CollegeStudent> list) {

      Iterator<CollegeStudent>it = list.iterator();

      while(it.hasNext()) {

            CollegeStudentstu = it.next();

            System.out.println("  |-"+stu.getNum() + ":" +stu.getName());

      }

}

}

 

结果:

jiying

    |-210:wangang

    |-211:wangemi

    |-212:xiaoqiang

ruanjian

    |-110:zhansgan

    |-111:lisi

    |-112:王五

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马程序员的tb_brand是指在JavaWeb基础教程中创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类中的成员变量保持一致。\[1\]在这个教程中,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值