集合(二):
一.泛型:
说明:(数据类型参数化)为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
范式:集合类型<泛型类型>集合类型=new 集合类型<泛型类型>。
泛型类型必须是应用数据类型(包装类)。
包装类:
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
二.HashMap:(接口实现类,不同步,不·安全)
创建 hashMap 的范式:HashMap<键约束,值约束> map = new HashMap<键约束,值约束>();
方法:
1. put() 需要一组键值参数,起到添加和修改的作用。
2. get() 需要一个键参数,作用是获取对应的值
3. remove() 需要一个键参数,作用是删除当前键值对(不在集合上直接使用该方法,否则会报错)
遍历map集合的方法:
- keySet () 将map集合的所有 ” 键 “ 组成一个 Set 集合,通过遍历Set 集合使用 get()获取对应值
- valus() 将map集合的所有 “ 值 ” 组成一个Collection 集合,通过遍历Collection 集合使用具体值
- entrySet() 将map集合中的所有 “ 键 - 值对 ” 组成一个 Set 集合,通过遍历Set 集合,操作每一个 Entry 对象,使用 getKey() \ getValue() 获取键值数据
三.迭代器Iterator:
集合获取迭代器的范式:(map没有迭代器)
Iterator it = 集合名称.iterator()
迭代器中的数据相当复制一份原集合,创建后自带 “ 游标 ” ,通过游标的 hasNext() \ next()操作迭代器
Iterator it = 集合名称.iterator();
while(it.hasNext()){
Object obj = it.next();
}
四.例子:
package wordcount;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
/**
编写程序,使用 map 集合的键值对统计 “asdkljflasdjfl”
字符串中各字符出现的次数,键表示出现的单个字符,值表示该字符出现的次数
最终结果输出类似于:a(5次)、b(1次)
提示,使用字符串的 toCharArray() 方法,将字符串转为一个 char 类型数组
*/
public class WordCount {
public static void main(String[] args) {
String world="asdkljflasdjfl";//字符串变量
HashMap<Character, Integer> map = new HashMap<Character, Integer>();//hashMap实例化
char[] array = world.toCharArray();// 把字符串转化为数组
// for (char a:array) {//遍历数组
// if (map.containsKey( a )){//判断HashMap中是否//包含数组元素
// Integer integer = map.get( a );//获取value
// map.put( a,integer+1 );//有的话加1
// }else {
// map.put( a,1 );//没有则把value写死
// }
// }
for (char a:array) {
map.put( a, map.containsKey( a )?map.get( a )+1:1);//与上差不错
}
Set<Character> set = map.keySet();//使用迭代器的前提
Iterator<Character> iterator = set.iterator();
while (iterator.hasNext()){//判断下个游标是否为空
Character next = iterator.next();//取出key
Integer integer = map.get( next );//通过key获取valu
System.out.println(next+"("+integer+"次)");
}
}
}
五.底层扩展: