Collection是一个接口,其下有两个常用的集合体系,一个是List,另一个是Set。
List系列集合:添加的元素是有序、可重复、有索引。
实现类:
ArrayList、LinekdList :有序、可重复、有索引。
Set系列集合:添加的元素是无序、不重复、无索引。
实现类:
HashSet: 无序、不重复、无索引;
LinkedHashSet: 有序、不重复、无索引。
TreeSet:按照大小默认升序排序、不重复、无索引。
集合初始化
Collection<String> vehicles = new ArrayList<>();
//Set vehicles = new HashSet<>(); //Set集合遍历类似,改为HashSet即可
//List vehicles = new ArrayList<>();
Collections.addAll(vehicles, "飞机", "坦克", "马车", "火车", "电车", "轻轨", "磁悬浮列车");
//1、第一种遍历方式:使用迭代器
System.out.println("使用Iterator迭代器进行遍历:");
Iterator<String> it = vehicles.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
System.out.println("\n" + "---------------------------------");
//2、第二种遍历方式:增强for循环进行遍历
System.out.println("使用增强for循环进行遍历:");
for (String vehicle : vehicles) {
System.out.print(vehicle + " ");
}
System.out.println("\n" + "---------------------------------");
System.out.println("使用匿名内部类进行遍历:");
vehicles.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.print(s + " ");
}
});
System.out.println("\n" + "---------------------------------");
//3、第三种遍历方式:Lambda表达式进行遍历
System.out.println("使用Lambda表达式进行遍历:");
vehicles.forEach((s) -> System.out.print(s + " "));
System.out.println("\n" + "---------------------------------");
遍历结果:
使用Iterator迭代器进行遍历:
飞机 坦克 马车 火车 电车 轻轨 磁悬浮列车
---------------------------------
使用增强for循环进行遍历:
飞机 坦克 马车 火车 电车 轻轨 磁悬浮列车
---------------------------------
使用匿名内部类进行遍历:
飞机 坦克 马车 火车 电车 轻轨 磁悬浮列车
---------------------------------
使用Lambda表达式进行遍历:
飞机 坦克 马车 火车 电车 轻轨 磁悬浮列车
---------------------------------
Map是一个接口,其下有两个常用的集合体系,一个是HashMap,另一个是HashTable,其中,使用最多的是HashMap。
HashMap:元素按照键是无序,不重复,无索引,值不做要求,基于哈希表(与Map体系一致)
LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求,基于哈希表
TreeMap:元素只能按照键排序,不重复,无索引的,值不做要求,可以做排序
集合初始化:
Map<String , Integer> phones = new HashMap<>();
phones.put("MI_10_ULTRA",5999);
phones.put("MI_10_PRO",4999);
phones.put("MI_10_S",3999);// Map集合后面重复的键对应的元素会覆盖前面重复的整个元素!
phones.put("MI_10",3999);
phones.put("MI_10_LITE",2999);
//第一种遍历方式:键找值,拿到集合的全部键
//1、键找值 : 拿到集合的全部键
Set<String> keys=phones.keySet();
System.out.println("使用键找值方式进行遍历:");
//2、遍历每个键,根据键提取值
for (String key : keys) {
int money=phones.get(key);
System.out.println("型号:"+key+" 价格:"+money+"元");
}
System.out.println("\n" + "---------------------------------");
//第二种遍历方式:键值对,调用Map的方法 entrySet把Map集合转换成Set集合形式 maps.entrySet();
// 1、把Map集合转换成Set集合 Entry可以理解为同时封装了map中的kv键值对的类
System.out.println("使用键值对方式进行遍历:");
Set<Map.Entry<String, Integer>> entries = phones.entrySet();
//2、开始遍历
for (Map.Entry<String, Integer> entry : entries) {
String phoneName=entry.getKey();
int price=entry.getValue();
System.out.println("型号:"+phoneName+" 价格:"+price+"元");
}
System.out.println("\n" + "---------------------------------");
//第三种遍历方式:Lambda表达式,JDK 1.8开始之后的新技术。
System.out.println("使用Lambda表达式进行遍历:");
phones.forEach((k, v) ->{
System.out.println("型号:"+k+" 价格:"+v+"元");
});
遍历结果:
使用键找值方式进行遍历:
型号:MI_10_S 价格:3999元
型号:MI_10_PRO 价格:4999元
型号:MI_10_LITE 价格:2999元
型号:MI_10_ULTRA 价格:5999元
型号:MI_10 价格:3999元
---------------------------------
使用键值对方式进行遍历:
型号:MI_10_S 价格:3999元
型号:MI_10_PRO 价格:4999元
型号:MI_10_LITE 价格:2999元
型号:MI_10_ULTRA 价格:5999元
型号:MI_10 价格:3999元
---------------------------------
使用Lambda表达式进行遍历:
型号:MI_10_S 价格:3999元
型号:MI_10_PRO 价格:4999元
型号:MI_10_LITE 价格:2999元
型号:MI_10_ULTRA 价格:5999元
型号:MI_10 价格:3999元