一、结构特点
List、Set都继承与Collection接口。
Map是基于键值对形势存储的数据结构,是个独立的接口。
List集合是有序的,且元素可以重复。
Set集合是无序的,且它所存储的元素是不可重复的。
Map集合是无序的,它的键不允许重复,元素可以重复。
二、怎么实现
List:
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("a");
System.out.println(list);
// 普通for循环
for(int i = 0; i < list.size(); i++){
String s = list.get(i);
System.out.println(s);
}
// 增强for循环
for (String s : list) {
System.out.println(s);
}
打印结果:
存储是有序的,且元素可以重复
Set:
Set<String> set = new HashSet<>();
set.add("1");
set.add("6");
set.add("x");
set.add("2");
set.add("x");
set.add("a");
set.add("a");
System.out.println(set);
// 迭代器
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
System.out.println(s);
}
打印结果:
可以看到Set打印出来的结果跟我添加的结果顺序是不同的,而且这些结果是不重复的
Map:
Map<String,String> map = new HashMap<>();
map.put("name","Jack");
map.put("sex","man");
map.put("age","19");
map.put("name","S1mple");
map.put("height","183");
// Map会把所有的Key存放在一个Set集合中,通过.keySet()方法得到所有的Key值
Set<String> keySet = map.keySet();
// 使用迭代器打印Key值所对应的Value值
Iterator<String> it = keySet.iterator();
while (it.hasNext()) {
String key = it.next();
String value = map.get(key);
System.out.println(key+":"+value);
}
打印结果:
可以看到它是无序的,它的键不允许重复,元素可以重复。
三、总结
List和Set的父类都是Conection,而Map是一个独立的接口
List是有序的而且里面的数据是允许重复的
Set和Map是无序的。Set的值不允许重复。而Map是基于键值对形势存储的数据结构,所以它的Key不允许重复,但是Value允许重复。