1、集合框架之 Map集合
Map<K,V> : 一次添加一对元素。Collection一次添加一个元素。其实Map集合中存储的就是键值对,map集合中必须保证键的唯一性。
① 添加:
Value put (key,value) :返回前一个和同key关联的值,若没有返回null。即存相同的键,值会被覆盖。因为要保证key唯一。
② 删除:
Void clear(); //清空map集合 Value remove(key) ;
③ 判断
Boolean containsKey(key);
Boolean containsValue(value);
Boolean isEmpty();
④ 获取
Value get(key) : 通过key获取值。
Int size(); 获取键值对的个数。
2、事例: 取出map集合中所有元素。
方法一:通过keyset()获取map中所有键的Set集合,再通过Iterator迭代器获取到每一个键,进而获取每一个值。
map.put(0, "liang"); map.put(02, "ming");
Set set=map.keySet(); //返回Set集合,而非List,保证元素的唯一性。
Iterator it=set.iterator();
while(it.hasNext())
{ System.out.println(map.get(it.next())); }
方法二:使用map的entrySet(),
该方法将键和值的映射关系作为对象存储到了set集合中,而这个映射关系的类型就是Map.Entry类型。 map.put(8, "xiao");
map.put(0, "liang");
map.put(02, "ming");
Set<Map.Entry<Integer, String>> entrySet=map.entrySet(); //得到键值的集合 Iterator<Map.Entry<Integer, String>> it=entrySet.iterator(); // 得到迭代器
while(it.hasNext()){ Map.Entry<Integer, String> me=it.next();
System.out.println(me.getKey()+":"+me.getValue()); }
3、Map常用的子类
① HashTable:内部结构是哈希表,是同步的。不允许null作为键,Null作为值。
② HashMap:内部结构是哈希表,是不同步的。允许null作为键,null作为值。
③ TreeMap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。 本质:Map是Set集合的扩充,其实Set集合底层就是由Map集合实现的。
4、 Hashtable的子类:Propertise 用来存储键值对象的配置文件信息。
5、LinkedHashMap : 实现的是有序,即如何存进去就如何取出来。
TreeMap: 实现的是排序。
Acer_ yanfengfeng ;
事例:使用Map结合来操作字母次数
/**
* 记录字母次数的代码
* 打印结果: a(2) b(1) ...
* 思路:
* ①能存储映射关系的容器有 数组和Map集合。
* ②因为没有有序编号,所以使用Map集合来存储。
* ③因为要保证唯一性且有顺序,所以使用TreeMap集合。
*
* @param args
*/
public static void main(String[] args) {
String str="gggabcabcab ch";
String s=getCharCount(str);
System.out.println(s);
}
//指定容器得到 映射关系
private static String getCharCount(String str) {
char[] chs=str.toCharArray();
Map<Character,Integer> map=new TreeMap<Character,Integer>();
for(int i=0;i<chs.length;i++){
if(!(chs>='a'&&chs<='z'||chs>='A'&&chs>='Z')) //踢出空格
continue;
Integer value=map.get(chs);
if(value==null){
map.put(chs, 1);
}else{
map.put(chs, value+1);
}
}
return mapToString(map);
}
//将map集合转为指定格式
private static String mapToString(Map<Character, Integer> map) {
StringBuilder sb=new StringBuilder();
Iterator<Character> it=map.keySet().iterator();
while(it.hasNext()){
Character key=it.next();
Integer value=map.get(key);
sb.append(key+"("+value+")");
}
return sb.toString();
}
6、集合框架 之 Collections
① 排序 Collections.sort( list ); //对list集合进行指定顺序的排序。
② 交换 swap( list ,i ,j ) // 在集合列表指定位置交换元素。
7、集合框架 之 数组Arrays
① Arrays.asList(数组) ; 将数组转成集合。
好处:因为数组的长度是固定的,所以对于集合的增删方法时不可以使用的,否则会发生异常。
注意:如果数组的中的元素师对象,那么转成集合时,直接将数组中的元素作为集合中的元素进行存储。若果数组中的元素师基本类型数值,那么会将数组作为集合中的元素进行存储。
比如 int[] arr={ 11,22,33}; List list=Arrays.asList(arr); //此时存储的只有一个对象作为元素进行存储。
8、Collection之 将集合转为数组
①使用特点:集合转为数组可以对集合中的元素原本操作的方法进行限定,不允许对其进行增删。
② 注意到:如果长度小于集合的size,那么该方法就会创建一个同类型并和集合相同的size的数组。如果长度大于集合的size,那么该方法就会使用指定的数组,存储集合中的元素,其它位置默认为Null。
②事例:
List<String> list= new ArrayList<String>();
String[] arr=list.toArray<>(new String[5]); //将集合中的元素存储到字符串数组中;
System.out.println(Arrays.toString( arr )); //将数组以集合形式打印输出。
|