这里写目录标题
集合与数组
集合类提供了空间可变的储存对象容器集合只能存储引用类型,如果存储基本类型要用包装类
集合分为Collection单列集合接口和Map键值对结合接口两种
Collection下有分为可重复的List接口还有不可重复的Set接口
List下有ArrayList类与LinkedList类等
Set下有Hashset和Treeset类
Map下重点关注HashMap类
集合与数组的区别
同:集合和数组都是容器
异:从功能上集合更强大,可以适用于元素个数不固定,大小可变的情况,适用于做增删操作的场景
1.Collection集合
1.1 Collection体系结构
1.2 Collection概述与使用
通过多态方式,利用ArrayList实现,特别注意,这里是没有索引这个玩意的
支持泛型,在编译阶段就对集合中元素进行约束
//集合对泛型的支持
//在编译阶段就约束集合对某些类型进行操作
Collection<String> list2 = new ArrayList<>(); //JDK1.7以后支持该种形式
list2.add("Java");
//集合与泛型都只支持引用类型
Collection<Double> list3 = new ArrayList<>();
// list3.add(23); //出错
list3.add(23.0); //正确
1.3 Collection的常用api
对于所有的单列集合List与Set,都可以继承使用他们父接口Collection的方法
Collection<String> list = new ArrayList<>();
//1.add 添加元素,如果添加成功就返回true;
list.add("Java");
//2.clear 清空集合的元素
list.clear();
//3.isEmpty判断集合是否为空
System.out.println(list.isEmpty());
//4.size获取集合大小,即集合个数
System.out.println(list.size());
//5.contains判断集合中是否含有某个元素
System.out.println(list.contains("Java"));
//6.remove删除某个元素,默认只删前面的第一个
//全删:要通过遍历删除
System.out.println(list.remove("Java"));
//7.将集合转换为数组
Object arrs = list.toArray();
//8. 两个集合合并
//collection1.addAll(collection2)是复制一份放到前一个集合中
1.4 Collection对象的遍历
1.4.1 使用迭代器遍历
迭代器是集合专属的遍历方法。
Collection<String> lists = new ArrayList<>();
lists.add("zm");
lists.add("xz");
lists.add("ss");
lists.add("st");
System.out.println(lists);
//得到当前元素迭代器对象
Iterator<String> it = lists.iterator();
//迭代器默认指向下标0
String elem =it.next();
System.out.println(elem);
//每一次用next()都会往后一步,当最后一个元素超过以后会抛出异常
//元素越界NoSuchElementException
System.out.println(it.next());
//定义while循环,千万别在一个while循环里搞出两个next()
//打印所有元素
while(it.hasNext()){
String ele = it.next();
System.out.println(ele);
补充知识:迭代器的原理
1.4.2 使用增强的for语句
//用for each来遍历
for(String elem:lists){
System.out.println(elem);
}
1.4.3 使用forEach方法
//调用了Collection的forEach方法
//forEach内部有一个内部的增强for语句循环
lists.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
//可以等价于上面
lists.forEach(s -> {System.out.println(s);});
}
1.4.4 Collection遍历的底层原理
以图为例:main方法根据引用的地址获得堆内存中集合对象的地址,再根据集合对象中movie对象的地址来引用movie对象。记住由于没有索引,所以只能根据对象地址来寻找
集合中存储的是元素对象地址,如果不想打印地址出来可以重写toString方法,不重写返回的是这个对象的hashcode码,重写可以通过idea里面的快捷键alt+insert快速实现。