一、学习目的
Java语言中数组可以存储多个元素,它的缺点就是数组一旦创建,它的长度就不能再发生改变。但在实际的开发过程中,我们需要一个可以随时改变大小的数组,因此Java语言就提供了Collection集合。
二、学习内容
一、Collection接口
Collection抽象接口,定义集合的相关操作:
1,List接口 列表 特点:存储的数据有序 内容可重复
例如 :
ArrayList:接口实现类, 数组, 随机访问
LinkedArrayList:接口实现类, 链表, 插入删除
2,Set接口 “集合” 特点:存储的数据无序 数据之间不重复
例如: HashSet 使用hash表(数组)存储元素
三、List接口的方法:
四、List方法具体使用
1,add 方法,集合末尾添加元素
// 添加一个元素
Collection list = new ArrayList();
list.add("hello world");
list.add("Merry");
System.out.println(list);
2,删除集合中的元素
//删除一个元素
list.remove("hello world");
System.out.println(list);
System.out.println(list.size());
3,判断是否包含某个元素
//判断是否包含一个元素
if(list.contains("Merry")){
System.out.println("包含");
}else{
System.out.println("不包含");
}
4,判断集合是否为空
//判断是否为空
if(list.isEmpty()){
System.out.println("集合为空");
}
5,判断两个集合是否相同
//判断两个集合是否相同
Collection list2 = new ArrayList();
list2.add("Jack");
list2.add("and");
list2.add("Merry");
if(list.equals(list2)){
System.out.println("两个集合内容相同");//比较集合的内容
}else{
System.out.println("两个集合内容不相同");
}
6,遍历集合
-
使用Iterator来遍历集合
1, hasNext 判断是否由有元素;
2, next 获取下一个元素;Iterator iterator = list2.iterator(); while(iterator.hasNext()){ System.out.print(iterator.next()+" "); }
3,错误的使用示范示范:
while(iterator.next() != null){
System.out.println(iterator.next());
} // 错误方式
-
使用快速循环实现
//2,for each 快速循环 for(String obj:list2){ System.out.print(obj+" "); }
-
for循环实现
//for循环 for(int i = 0; i ) list2).get(i)+" "); }
五、ArrayList类的使用
- ArrayList :连续的内存空间 优点:访问方便, get()方法 ; 缺点:删除,添加
- LinkedArrayList :内部使用链表实现 内存基本不连续 优点:增加 删除方便 ;缺点:访问不方便
注:集合里面只能存放引用,如果要存放基本数据类型,要自动将基本数据类型转化成包装类 ,byte->Byte , char->Char ,int->Integer , long->Long, float->Float , double->Double
(1)ArrayList方法的具体使用
1,向集合中增加元素
ArrayList score = new ArrayList();
score.add(2);
score.add(3); //添加是在末尾添加
score.add(0,1); //在指定位置插入元素
System.out.println(score);
2,访问元素
//访问指定元素
int temp = score.get(2);
System.out.println(temp);
3,修改指定位置的元素
//修改一个元素
score.set(0,0); //修改第一个元素0
System.out.println(score);
4,删除一个元素
//删除
score.remove(0);//删除指定位置的元素
score.remove((Integer)2); //删除指定的对象,整数2
score.clear();//清空 删除所有
System.out.println(score);
5,将一个集合的所有元素添加到另外一个集合
ArrayList a2 = new ArrayList();
a2.add(1);
a2.add(2);
a2.add(3);
a2.add(4);
a2.add(5);
score.addAll(a2);//将一个集合直接添加到另外一个
System.out.println(score);
6,取两个集合的交集
ArrayList a3 = new ArrayList();
a3.add(1);
a3.add(2);
score.retainAll(a3);
System.out.println(score);//输出两个集合的交集
7,查找某个元素在集合里的索引位置
//访问某个对象在集合里面的索引位置
ArrayList a4 = new ArrayList();
a4.add(1);
a4.add(2);
a4.add(1);
a4.add(2);
a4.add(3);
a4.add(1);
System.out.println(a4.indexOf(1));//集合里面两个1,输出的是第一个1出现的位置
System.out.println(a4.lastIndexOf(1));//最后一个1出现的位置
8,将ArrayList转化成普通数组
第一种:
//将ArrayList转化为普通数组
Integer[] objects = new Integer[a4.size()];
a4.toArray(objects);
for(Integer integer:objects){
System.out.print(integer+" ");
}
第二种:
Object[] objects1 = a4.toArray();
for(Object integer:objects1){
System.out.print(integer+" ");
}
Iterator iterator = a4.iterator();
while(iterator.hasNext()){
System.out.print(iterator.next()+" ");
}
9,删除符合某种条件的元素
//删除某个范围内的数据
ArrayList nums = new ArrayList();
nums.add(1);
nums.add(2);
nums.add(3);
nums.add(4);
//Lambda表达式
nums.removeIf(element-> element%2 == 0);
System.out.println(nums);
注意:不能使用循环的方式删除
六、Lambda表达式的使用
(1) Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。
(2)使用:
//闭包 enclusure 把函数作为一个方法的参数
class ArrayClass{
public void test(int[] target,Show s){
for(int element :target){
s.customShow(element);
}
}
}
//必须是接口 这个接口里面只有一个方法
interface Show{
void customShow(int element);
}
如果参数是一个接口类对象,且接口里面只有一个方法 把这个方法作为参数传递可以省略方法名 ,如果只有一个参数,和参数类型可以省略,如果代码块里面只有一行语句,大括号也可以省略 ;
ArrayClass ac = new ArrayClass();
int[] num = {1,2,3,4,5,6};
ac.test(num,(int element) -> {System.out.print(element+" ");});
七、Map接口
Map接口 保存有映射关系的对象 键值对 键不能相同 值可以相同
例如:
HashMap 底层数据结构采用哈希表实现,元素无序且唯一,线程不安全,效率高;
三、学习感悟
今天学习的难点就是Lambda表达式的使用,这点内容不容易理解,需要多思考,多联系。