总结:
List<E>(集合) 可以重复 有索引值 可通过ArrayList及LinkedList实现 都允许放空对象:null及空值:""。
1. ArrayList针对线性,数组的封装,LinkedList针对链表的封装
2. LinkedList 善于插入和删除,ArrayList查询效率比较高
方法:add增加 remove("值")删除 可以直接打印
Set<E>(集合) 不可以重复 无索引值(使用迭代器遍历) 可通过HashSet及TreeSet实现
HashSet 无序 允许放空对象(null)和空值("")。
TreeSet 有序 允许放""不允许放null(不允许放空对象但值允许为空)
方法:add增加 remove("值")删除 可以直接打印
Map<String,String> K-V对 可通过HashMap及TreeMap实现 键可以重复(值为最新添加的),值可以重复。
1.键可以为null对象,拿值也通过null。2.键也可以为"",拿值也通过"" 3.值可以为null对象,也可以为""
两种方法实现遍历Map:1.迭代器 2.foreach
方法:put增加键值对 get("键")拿键对应的值(如果没有对应的键,拿到的值为null)
remove("键")通过键来删除键值对 可以直接打印
Iterator<E> 遍历集合
方法:删除 remove()
List,Set都是继承自Collection接口,Map则不是;
List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;
扩充:数组与集合的区别
数组不可变,只能存放相同的数据类型
集合可变,能存放多种数据类型
1. Collection(util)
(1)是一个接口 ,继承了 Iterable
(2)方法: size() contain() isEmpty() add() remove() iterator() clear() toArray()
(3)操作集合的工具类:Collections.sort(list); sort() binarySearch() reverse()
2.List(util): 继承了Collection
接口,要使用List对象,需要将其实现类(ArrayList 和 LinkedList)的对象赋给List类型的对象才能使用(向上转型)
增加:add 删除:remove
(1)允许重复(可以添加且打印重复的值),存在索引值
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("zhangsan");
list.add("lisi");
//list.add()方法的返回值为boolean,添加成功返回true
System.out.println(list.add("wangwu"));
System.out.println(list);
System.out.println(list.get(1));
}
输出结果 true
[zhangsan, zhangsan, lisi]
zhangsan
(2)因为List是一个接口,继承了Collection接口
(3)所以不能直接对List实例化,通过其实现类的对象赋给接口(List)类型的对象:就是要通过向上转型完成父类引用指向子类对象,才能使用List方法
2.1、ArrayList 数组列表 出现于JDK1.2
1.通过ArrayList创建List类型的对象
List<String> list = new ArrayList<>();
2.使用add添加值,使用get(index)拿到值(ArrayList实现了List,所以也可以重复赋值及打印)
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
System.out.println(list);
System.out.println(list.get(1));
}
输出结果:[zhangsan, lisi, wangwu]
lisi
2.2、LinkedList 链表列表 与数组列表ArrayList一样 出现于JDK1.2
1.通过LinkedList创建List类型的对象
List<String> list = new LinkedList<>();
2.使用add添加值,使用get(index)拿到值(