黑马程序员——集合(三)
来源:互联网 发布:宝塔 递推 算法 编辑:程序博客网 时间:2024/06/08 19:42
-----------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:王五
- 黑马程序员——集合(三)
- 黑马程序员——集合(三)
- 黑马程序员——集合类(三)
- 黑马程序员——集合学习笔记(三)
- 黑马程序员_集合框架(三)——泛型
- 黑马程序员——Java之集合框架(三)
- 黑马程序员——Java基础--集合(三)
- 黑马程序员——自学总结(三)集合框架
- 黑马程序员——集合框架(三)
- 黑马程序员——JAVA基础----集合框架(三)
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 10-java5的线程锁技术
- jQuery EasyUI DataGrid Checkbox 数据设定与取值
- Ruby实现斐波那契数列
- IIS与Web基情
- Java对象的序列化和反序列化
- 黑马程序员——集合(三)
- 2015年上半年——项目记录一
- Longest Substring Without Repeating Characters (最长不重复字符的子序列) Java-O(n)解法
- iOS经纬度获取
- UVa 122 - Trees on the level
- 1-1 RFID理论基础知识要点
- mybatis初步认识(一)
- C语言精度计算——大数相乘
- java实现屏幕捕捉程序