集合 map

 

遍历map的几种方式:

public static void main(String[] args) {


  Map<String, String> map = new HashMap<String, String>();
  map.put("1", "value1");
  map.put("2", "value2");
  map.put("3", "value3");
  
  //第一种:普遍使用,二次取值
  System.out.println("通过Map.keySet遍历key和value:");
  for (String key : map.keySet()) {
   System.out.println("key= "+ key + " and value= " + map.get(key));
  }
  
  //第二种
  System.out.println("通过Map.entrySet使用iterator遍历key和value:");
  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
  while (it.hasNext()) {
   Map.Entry<String, String> entry = it.next();
   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
  }
  
  //第三种:推荐,尤其是容量大时
  System.out.println("通过Map.entrySet遍历key和value");
  for (Map.Entry<String, String> entry : map.entrySet()) {
   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
  }

  //第四种
  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
  for (String v : map.values()) {
   System.out.println("value= " + v);
  }
 }

 

HashMap循环遍历方式及其性能对比

结论:

a. HashMap的循环,如果既需要key也需要value,直接用

b. 如果只是遍历key而无需value的话,可以直接用

关于map,map.Entry的结合使用

Map是java中的接口,Map.Entry是Map的一个内部接口。

Map提供了一些常用方法,如keySet()、entrySet()等方法。

keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

    /**
     * 打印 总分与平均分
     */
    public static void printScore(Map<String,ClassRoom> rooms){
        Set<Map.Entry<String,ClassRoom>> entrySet =rooms.entrySet();
        Iterator<Map.Entry<String,ClassRoom>> it =entrySet.iterator();
        while(it.hasNext()){
            Map.Entry<String,ClassRoom> entry =it.next();
            ClassRoom room = entry.getValue();
            double avg = room.getTotal()/room.getStus().size();
            System.out.println("班号为:"+room.getNo()+",总分"+room.getTotal()+",平均分"+avg);
        }        
    }
    /**
     * 统计分数
     */
    public static void count(Map<String,ClassRoom> rooms,List<Student> list){
        for(Student stu:list){
            String no = stu.getNo();
            double score = stu.getScore();
            //根据班级编号 查看 Map是否存在该班级  分拣思路
            ClassRoom room = rooms.get(no);
            if(null==room){  //第一次
                room = new ClassRoom(no);
                rooms.put(no, room);
            }            
            //存储 总分
            room.setTotal(room.getTotal()+score);
            room.getStus().add(stu); //加入学生            
        }
    }

 

 java 遍历arrayList的四种方法

ArrayList和LinkedList的几种循环遍历方式及性能对比分析

List的五种遍历方式
下面只是简单介绍各种遍历示例(以ArrayList为例),各自优劣会在本文后面进行分析给出结论。
(1) for each循环

(1) 无论ArrayList还是LinkedList,遍历建议使用foreach,尤其是数据量较大时LinkedList避免使用get遍历。
(2) List使用首选ArrayList。对于个别插入删除非常多的可以使用LinkedList。
(3) 可能在遍历List循环内部需要使用到下标,这时综合考虑下是使用foreach和自增count还是get方式。

 

 使用hashMap代替arrayList,时间复杂度降低一个数量级

 

posted @ 2016-02-16 15:03  milkty  阅读(234)  评论(0)    收藏  举报