集合的架构图
集合主要由3个部分组成——迭代器Iterator、集合Collection(包括List和Set)、map集合。这些都是接口。
1.List
List<String> arr= new ArrayList<String>();//实例化
arr.add("海上生明月"); //添加元素
arr.add("天涯共此时");
arr.add("自挂东南枝");
arr.add("啥都不害怕");
arr.remove(2); //移除
for (int i = 0; i < arr.size(); i++) { //遍历,通过下标获取
System.out.println(arr.get(i));
}
arr.remove(2);
for(String s:arr) { //遍历
System.out.println(s);
}
2.Set
Date d1= new Date();
Date d2=new Date(1554630549863L);
Date d3=new Date(1554230549863L);
Date d4=new Date(1554430549863L);
System.out.println(d1.getTime());
Set<Date> sj= new HashSet<Date>(); //实例化HashSet
sj.add(d1);
sj.add(d2); //新增元素
sj.add(d3);
sj.add(d4);
sj.add(d4); //重复add,无效
sj.add(d4);
sj.add(d4);
//以下实际指挥输出5个值,重复值不会add进去
for(Date d:sj) {
System.out.println(d.getTime());
}
3.Map
Map<String, Person> map = new HashMap<String, Person>(); //实例化HashMap
Person p1= new Person(); //创建一个Person对象
p1.setCode("2019");
p1.setName("Bao");
Person p2= new Person();
p2.setCode("2018");
p2.setName("Long");
Person p3= new Person();
p3.setCode("2020");
p3.setName("Cheng");
map.put(p1.getCode(), p1); //插入一个对象,包含键值和对象
map.put(p2.getCode(), p2);
map.put(p3.getCode(), p3);
map.put(p3.getCode(), p1); //键值不能重复
for(Map.Entry<String, Person> entry:map.entrySet()) { //遍历方法:将Map转为Collection再遍历
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue().getName());
}
System.out.println(map.containsKey("2021")); //判断集合是否包含键值
System.out.println(map.containsKey("2020"));
System.out.println(map.containsValue(p3)); //判断集合是否包含对象
System.out.println(map.containsValue(new Person()));
输出的结果为:
Key = 2019, Value = Bao
Key = 2018, Value = Long
Key = 2020, Value = Bao
false
true
false
false
Map的迭代方法还可以是这样:
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
//遍历map中的键
for (Integer key : map.keySet()) {
System.out.println("Key = " + key);
}
//遍历map中的值
for (Integer value : map.values()) {
System.out.println("Value = " + value);
}
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
还有一种迭代方法是使用迭代器。
4.Iterator
Iterator<Map.Entry<String,Person>> entries= map.entrySet().iterator();//先将Map转成Collection再转成iterator
while(entries.hasNext()) { //像游标一样,判断是否仍有值
Map.Entry<String, Person> p = entries.next(); //取下一个值
System.out.println("Key = " + p.getKey() + ", Value = " + p.getValue().getName());
}
输出结果为:
Key = 2019, Value = Bao
Key = 2018, Value = Long
Key = 2020, Value = Bao