前言:在此之前,我们一谈到保存多个数值,首先能想到的就是数组,因为在我们之前学的所有类型中唯有数组可以存多个值,但是数组也有一些弊端,比如说,我们知道数组一旦定义就不可变,这里说的不可变是数组长度不可变,数组里面保存的内容是可变的,通过大量的编写代码。你就可以发现保存多个值,只有数组是不能满足我们的需求的。在我们还不能去确定要保存的值有多少个的时候,我们就需要一个可变的容器来保存我们需要保存的内容。那么这个容器就是今天我们学习的集合 ---- Collection.
1. Collection到底是什么呢?Collection 是一个抽象接口,里面定义了集合的相关操作。
2.collection主要方法:
- boolean add(Object o)添加对象到集合
- boolean add(int i, Object o)添加对象到集合索引值为i的位置
- boolean remove(Object o)删除指定的对象
- void clear()删除集合中所有元素
- boolean contains(Object o)查找集合中是否有指定的对象
- int size()返回当前集合中元素的数量
- boolean isEmpty()判断集合是否为空
- Iterator iterator()返回一个迭代器
- boolean equals(Object o) 集合比较
- boolean containsAll(Collection c)查找集合中是否有集合c中的元素
- boolean addAll(Collection c)将集合c中所有的元素添加给该集合
- void removeAll(Collection c)从集合中删除c集合中也有的元素
- void retainAll(Collection c)从集合中删除集合c中不包含的元素
3.实际使用
下面就关于上面提到的集合方法进行实际的操作一下,简单感受一下:
首先定义一个集合t1,下面的所有的操作都用t1进行,定义如下
Collection<String> t1 = new ArrayList();
1,添加对象到集合:
t1.add("Jack");
t1.add("Merry");
-
删除⼀一个对象
t1.remove("Jack"); System.out.println(t1);
-
获取元素个数
System.out.println(t1.size());
-
判断是否包含⼀一个元素
if (t1.contains("Merry")){ System.out.println("有merry"); }else{ System.out.println("没有merry"); }
5.判断是否为空
if(t1.isEmpty()){
System.out.println("是空的");
} else{
System.out.println("不是空的");
}
-
判断两个集合是否相同(⽐比较集合⾥里里⾯面的内容)
Collection<String> t2 = new ArrayList<>(); t2.add("Merry"); t2.add("Jack"); t2.add("Rose"); t2.add("Tom"); if (t1.equals(t2)){ System.out.println("两个集合相同"); } else{ System.out.println("两个集合不不相同"); }
-
清空
t1.clear();
-
将ArrayList转化为普通数组
方法一:
Integer[] objects = new Integer[a4.size()];
t1.toArray(objects);
for (Integer i: objects){
System.out.println(i);
}
方法二:
Object[] objects1 = t1.toArray();
for (Object i: objects1){
System.out.println(i);
}
4. 集合的遍历
集合的遍历有三种方式,下面我们一起来学习吧~~~
1.使⽤用Iterator来遍历 , Iterator中有三个方法,hasNext next remove来帮助我们遍历集合,这虽然是我们第一次见,但是使用起来也比较容易,
hasNext 判断是否有元素
next 获取下⼀一个对象
remove 删除当前遍历过后的对象
遍历如下:
Iterator iterator = t2.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
-
第二种方法,我们在数组中用到过的for-each 快速循环 来遍历集合,遍历如下:
for (String obj: t2){ System.out.println(obj); }
3.第三种方式我们经常使用的 for- i
for (int i = 0; i < t2.size(); i++){
System.out.println(((ArrayList<String>) t2).get(i));
collection主要子接口对象:List和Set,集合关系图如下,当然还有其它的,图中并不完整,例如,还有Vector,Stack。。。。
![](https://img.haomeiwen.com/i18961445/37817d8c07a2cc65.png)
5.List(抽象接口,可重复有序)
list主要方法:
- void add(int index,Object element)在指定位置上添加一个对象
- boolean addAll(int index,Collection c)将集合c的元素添加到指定的位置
- Object get(int index)返回List中指定位置的元素
- int indexOf(Object o)返回第一个出现元素o的位置.
- Object remove(int index)删除指定位置的元素
- Object set(int index,Object element)用元素element取代位置index上的元素,返回被取代的元素
- void sort()
ArrayList和LinkedArrayList的方法基本相同,所以这里就只例举ArrayList的常用方法:增删改查(包含)
- 添加:
add(int i ,string) 第i号添加,
add(String) 末尾追加
addAll(集合) 添加一个集合对象
- 删除:
remove(int i) /remove(values),
removeAll() , 删除所有 clear()清空
改;set(int i ,String) 将第i号元素该为String值
(查)包含某个元素:contain
- 遍历:iterator()/for-each/for-i
访问:get
长度:size
是否为空:isEmpty
两个集合是否相等:equals
转换为数组 toArray
两个集合的交集.retainAll
其他:List有的方法它都有!
ArrayList 和LinkedArrayList 的区别:
ArrayList ——> 连续内存空间
LinkArrayList ——> 内部使用链表方式实现的 基本不连续
6.Lambda表达式
parameters) -> expression
或
(parameters) ->{ statements; }
1.lambda表达式的一般写法
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
statment1;
statment2;
//.............
return statmentM;
}
这是lambda表达式的完全式语法,后面几种语法是对它的简化。
2.只有一个参数写法
param1 -> {
statment1;
statment2;
//.............
return statmentM;
}
当lambda表达式的参数个数只有一个,可以省略小括号
3.只有一条语句的写法
param1 -> statment
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号
今天就结束了,明天继续!
网友评论