for高级循环
for(数据类型 变量名: 被遍历的集合(Collection)或者数组)
只能取出,不能增删。
对集合进行遍历:只能获取集合元素。但是不能对集合进行操作。
传统for与高级for区别:
高级for有一个局限性。必须有被遍历的目标。
public class ForDemo {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, "a");
hm.put(2, "b");
hm.put(3, "c");
Set<Integer> keySet = hm.keySet();
for (Integer i : keySet) {
System.out.println(i + "::" + hm.get(i));
}
for (Map.Entry<Integer, String> me : hm.entrySet()) {
System.out.println(me.getKey() + "::" + me.getValue());
}
}
}
lambda表达式(jdk1.8出现的)
集合.foreach(变量->{代码块});
foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作。
public class ForDemo {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, "a");
hm.put(2, "b");
hm.put(3, "c");
hm.forEach((k,v)->{
System.out.println("key:"+k+"value:"+v);
});
Set<Integer> keySet = hm.keySet();
keySet.add(3);
keySet.forEach(temp->{
System.out.println(temp);
});
List<String> list = new ArrayList<>(6);
list.add("1");
list.add("2");
list.forEach(v -> System.out.println(v));
}
}
对于Map的遍历:
- 使用 entrySet遍历 Map类集合 KV,而不是 keySet方式进行遍历。
- 说明:keySet 其实是遍历了2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出key所对应的 value。而 entrySet 只是遍历了一次就把 key和value都放到了entry中,效率更高。如果是 JDK8,使用 Map.forEach 方法。
- 正例:values()返回的是 V值集合,是一个 list 集合对象;keySet()返回的是K 值集合,是一个 Set 集合对 象;entrySet()返回的是K-V值组合集合。
package com.liu.exer;
import java.util.HashMap;
import java.util.Map;
public class testFor {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("a", 123);
map.put("b", 456);
map.put("c", 12);
//速度最慢,相当于先把所有key查出来一遍,再根据key查value。遍历两遍
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
//速度最快,一层一层查
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
//java8以上,速度介于两者之间,也是一层一层查,但是forEach速度比for慢
map.forEach((k,v)->{
System.out.println("key:"+k+"value:"+v);
});
}
}
list是父类型,arraylist是子类型
List集合:存放的数据可以重复,并且有顺序
ArrayList:
底层是Object数组 增删很慢,查询很快
//object :Integer ,String ,Float,Boolean lista就是杂货店,没有泛型
List lista = new ArrayList();
lista.add(1);
lista.add("see");
lista.add(23.5);
lista.add(true);
//集合只能存放自定义数据类型
//List<String> list = new ArrayList<String>(6); 全写方式,list是泛型 自定义了String类型
List<String> list = new ArrayList<>(6);
//添加
list.add("ss1");
list.add("2");
//根据内容删除
list.remove("ss1");
//根据下标删除
list.remove(1);
//移除集合中所有元素
list.clear();
//修改集合中的元素,指定位置
list.set(0, "www");
//遍历list
list.forEach(v -> System.out.println(v));
//字符character,单引号
List<Character> characters = new ArrayList<Character>();
characters.add('2');
LinkedList :
底层是链表。增删很快,查询慢
LinkedList的增删改查方法和ArrayList用的一样add set remove
List<String> bookList=new LinkedList<String>();
bookList.add("从入门到放弃");
bookList.add("面向");
//list集合转数组
Object[] objects = bookList.toArray();
book0List集合装入bookList1集合里:
List<String> book0List=new LinkedList<String>();
book0List.add("从入门到放弃");
book0List.add("面向");
List<String> bookList1=new LinkedList<String>();
bookList1.addAll(book0List);
package com.liu.exer;
import java.util.*;
public class testFor {
public static void main(String[] args) {
List<String> book0List=new LinkedList<String>();
book0List.add("从入门到放弃");
book0List.add("面向");
List<String> bookList1=new LinkedList<String>();
Object[] objects = bookList1.toArray();
for (Object object : objects) {
//加""转换为字符串
System.out.println(object+"");
}
}
}