前言
java容器类库用途是保存对象。主要分为两类,本篇文章着重描述Collection集合:-
单列集合(如Collection)
一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素,Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常与插入的顺序相同)。
-
双列集合(如Map)
一组成对的键值对对象,允许使用键来查找值,将数字和对象关联到一起。映射表允许我们使用另一个对象来查找某个对象,也被称为关联数组或字典。Map很强大
一、概述
1.Collection是单列集合的顶层接口,表示一组对象(Collection的元素)
2.Jkd不提供Collection接口的任何直接实现,他提供更具体的子接口(如 List (元素可重复的) / Set (元素不可重复的) ),可以通过子接口实现(通过子接口的实现类多态地实现),具体内容请前往如下链接:List/Set
二、基本使用
1.创建集合对象
2.创建集合元素+添加集合元素
3.输出集合对象
代码如下(示例):
import java.util.ArrayList;
import java.util.Collection;
/**
* @author 不想掉头发$
* @version 1.0
* @date 2021年08月20日
*/
public class CollectionDemo01 {
/**
*
* 创建Collection 集合对象
* 多态方式
* ArrayList()
*/
public static void main(String[] args) {
//创建Colection集合对象
Collection<String> collection = new ArrayList<String>();
//(创建集合元素,添加入集合)
//这里相当于直接创建了String引用对象加入集合
//若其他类如自定义的Student类则需要先创建对象
collection.add("hello");
collection.add("world");
collection.add("java");
//输出集合对象
//ArrayList中重写了toString方法输出格式为[hello, world, java]
System.out.println(collection);
}
}
三、常用方法
1.添加元素 :boolen add(E e)
2.删除元素 :boolen remove(Object o)
3.清空集合 :void clear()
4.判断集合是否存在指定元素 : boolen contains(Object o)
5.判断集合是否为空 : boolean isEmpty()
6.集合长度,即集合中的元素个数 : int size()
代码如下(示例):
/**
* @author 不想掉头发$
* @version 1.0
* @date 2021年08月20日
*/
import java.util.ArrayList;
import java.util.Collection;
/**
* Collection 集合 常用方法
* boolen add(E e) : 添加元素
* boolen remove(Object o) : 从集合中移除指定元素
* void clear() : 清空集合
* boolen contains(Object o) : 判断集合是否存在指定元素
* boolean isEmpty() : 判断集合是否为空
* int size() : 集合长度,即集合中的元素个数
*/
public class CollectionDemo02 {
public static void main(String[] args) {
//创建集合对象
Collection<String> collection = new ArrayList<String>();
//boolean add(E e) : 添加元素 返回结果是布尔类型 且永远返回true
//ArrayList 集合是 List 接口 的实现 ,(元素可以重复)
//Alt + 7 快捷查看 structs 方便查看类中模块
collection.add("hello");
collection.add("world");
collection.add("java");
//boolen remove(Object o) : 从集合中移除指定元素
System.out.println(collection.remove("java"));
//若集合中没有该元素则返回false
System.out.println(collection.remove("123"));
//void clear() : 清空集合
collection.clear();
//boolen contains(Object o) : 判断集合是否存在指定元素
System.out.println(collection.contains("java"));
//boolean isEmpty() : 判断集合是否为空
System.out.println(collection.isEmpty());
//int size() : 集合长度,即集合中的元素个数
System.out.println(collection.size());
}
}
四、遍历方法
补充概念:迭代器:
链接: Iterator.
1.迭代器遍历
涉及的方法:
public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的
E next():获取下一个元素值!
boolean hasNext():判断是否有下一个元素,有返回true ,反之。
代码流程:
1.先获取当前集合的迭代器
Iterator it = collection.iterator();
2.定义一个while循环,条件为it.hasNext()。
通过it.hasNext()询问是否有下一个元素,通过it.next()取出下一个元素。
代码如下(示例):
/**
* @author 不想掉头发$
* @version 1.0
* @date 2021年08月20日
*/
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
/**
* Iterator : 迭代器: 集合的专用遍历方式
* Iterator<E> interator() :返回此集合中元素的迭代器,
* 迭代器是通过集合的iterator() 方法得到的,所以说它是依赖于集合而存在的
*
* Iterator 中的常用方法
* E next(): 返回迭代器中的下一个元素
* boolean hasNext(): 如果迭代器中有更多元素,返回true
*/
//创建Collection 集合对象
Collection<String> collection = new ArrayList<>();
//添加元素
collection.add("hello");
collection.add("world");
collection.add("java");
//创建迭代器 :快捷键 Ctrl + Alt + v,返回集合中元素
Iterator<String> iterator = collection.iterator();
//while()循环遍历
//后面会用到增强for 来处理循环输出
while(iterator.hasNext()){
//一般的规范形式
String s = iterator.next();
System.out.println(s);
}
}
}
2.增强for /for-each loop 语句
从jdk5之后,实现 Interface Iterable ,允许对象成为增强for 语句 的目标,Iterable 接口 中有 抽象 方法 iterator()
注意:底层由迭代器实现
增强for循环必须有目标,目标只能是Collection集合和数组
定义格式:
for(集合/数组的数据类型 变量名;集合名/数组名){
输出(或其他操作) ;
}
例子:
private static void demo(){
int [] arr={1,2,3,4,4,5,5,6,3};
//for循环增强遍历
for(int i,arr){
sout(i);//1,2,3,4,4,5,5,6,3
}
}
代码如下(示例):
/**
* @author 不想掉头发$
* @version 1.0
* @date 2021年08月20日
*/
import java.util.ArrayList;
import java.util.Collection;
public class ForEachDemo {
public static void main(String[] args) {
//创建Collection 集合对象
Collection<String> collection = new ArrayList<>();
//添加元素
collection.add("hello");
collection.add("world");
collection.add("java");
//增强for循环遍历
for (String s : collection){
System.out.println(s);
}
}
}
3.JDK 1.8开始之后的新技术Lambda表达式
可以了解一下。
代码如下(示例):
/**
* @author 不想掉头发$
* @version 1.0
* @date 2021年08月20日
*/
import java.util.ArrayList;
import java.util.Collection;
public class LambdaForEachDemo {
public static void main(String[] args) {
//创建Collection 集合对象
Collection<String> collection = new ArrayList<>();
//添加元素
collection.add("hello");
collection.add("world");
collection.add("java");
Collection<String> lists = new ArrayList<>();
System.out.println(collection);
// [hello, world, java]
// s
collection.forEach(s -> {
System.out.println(s);
});
// collection.forEach(s -> System.out.println(s));
// collection.forEach(System.out::println);
}
}