集合 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); } }
结论:
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); //加入学生 } }
ArrayList和LinkedList的几种循环遍历方式及性能对比分析
List的五种遍历方式
下面只是简单介绍各种遍历示例(以ArrayList为例),各自优劣会在本文后面进行分析给出结论。
(1) for each循环
(1) 无论ArrayList还是LinkedList,遍历建议使用foreach,尤其是数据量较大时LinkedList避免使用get遍历。
(2) List使用首选ArrayList。对于个别插入删除非常多的可以使用LinkedList。
(3) 可能在遍历List循环内部需要使用到下标,这时综合考虑下是使用foreach和自增count还是get方式。
使用hashMap代替arrayList,时间复杂度降低一个数量级

浙公网安备 33010602011771号