HashMap学习笔记
package Map;
import java.util.*;
public class MapDemo1 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap();
map.put("Chinese",99);
map.put("Math",99);
map.put("English",49);
map.put("History",99);
System.out.println(map);
// for (int i = 0;i< map.keySet().size();i++){
// System.out.println(i);
// }
//遍历key
Set<String> keySet = map.keySet();
for (String k:keySet ) {
System.out.println("key:"+k);
}
//遍历value
Collection<Integer> value = map.values();
for (Integer v:value) {
System.out.println("value:"+v);
}
//按行遍历键值对 Set map.entrySet()
Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
for (Map.Entry<String,Integer> entry:entrySet) {
String key = entry.getKey();
Integer val = entry.getValue();
System.out.println(key+":"+val);
}
Collection<String> c = new ArrayList<>();
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
// for (String s:c) {
// System.out.println(s);
// }
c.forEach(s -> System.out.println(s));
//键值对遍历
map.forEach((k,v)-> System.out.println(k+":"+v));
}
}
这里可以看到Consumer是消费者模式,foreach迭代以及可分割迭代,都加了default关键字,这个是Java 8 新的关键字,以前接口的所有接口,具体子类都必须实现,而对于deafult关键字标识的方法,其子类可以不用实现,这也是接口规范发生变化的一点。
Consumer接口中包含抽象方法 void accept (T t),意味消费一个指定泛型的数据。
函数式接口@FunctionalInterface,所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面只能有一个抽象方法。这种类型的接口也称为SAM接口,即Single Abstract Method interfaces
特点
接口有且仅有一个抽象方法
允许定义静态方法
允许定义默认方法
允许java.lang.Object中的public方法
该注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。加上该注解能够更好地让编译器进行检查。如果编写的不是函数式接口,但是加上了@FunctionInterface,那么编译器会报错
// 正确的函数式接口
@FunctionalInterface
public interface TestInterface {
// 抽象方法
public void sub();
// java.lang.Object中的public方法
public boolean equals(Object var1);
// 默认方法
public default void defaultMethod(){
}
// 静态方法
public static void staticMethod(){
}
}
// 错误的函数式接口(有多个抽象方法)
@FunctionalInterface
public interface TestInterface2 {
void add();
void sub();
}