黑马程序员技术交流社区

标题: 【集合框架】 总结② [打印本页]

作者: 黑马-王康    时间: 2012-10-6 07:44
标题: 【集合框架】 总结②

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 ));  //将数组以集合形式打印输出。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2