Java
集合
Collection集合
集合的代表:Collection 接口
体系
- Collection
- List
- ArrayList
- LinkedList
- Set
- HashSet
- LinkedHashSet
- TreeSet
- HashSet
- List
最常用
特点
- List系列集合 : 添加的元素是有序的,可重复,有索引
- ArrayList,LinkedList:有序,可重复,可索引
- Set系列集合:添加的元素是无序,不重复,无索引.
- HashSet:无序,不重复,无索引
- LinkedHashSet: 有序,不重复,无索引
- TreeSet:按照大小默认升序排序,不重复,无索引
- HashSet:无序,不重复,无索引
集合对泛型的支持
-
集合都是支持泛型的,可以在编译阶段约束集合只能操作某种数据类型
-
Collection<String> lists = new ArrayList<String>(); Collection<String> lists = new ArrayList<>(); //JDK 1.7开始毫秒的泛型类型申明可以省略不写
注意:集合和泛型都只能支持引用数据类型,不支持基本数据类型,所以集合中存储的元素都认为是对象
错误实例
Collection<int> lists = new ArrayList<>();
//不能这样使用
如果集合中要存储基本类型数据要是有基本数据类型包装类
//存储基本类型使用包装类
Collection<Integer> lists = new ArrayList<>();
//最后的<>可以省略,最好加上
Collection<Double> lists = new ArrayList<>();
Collection集合常用API
-
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的
-
方法名称 说明 public boolean add(E e) 把给定的对象添加到当前集合中 public void clear() 清空集合中所有的元素 public boolean remove(E e) 把给定给的对象在当前集合中删除 public boolean contains(Object boj) 判断当前集合中是否包含给定的对象 public boolean IsEmpty() 判断当前集合是否为空 public int size() 返回集合元素的个数 public Object[] toArray() 把集合中的元素,存储到数组中
遍历方式
方式一 : 迭代器
方式二 : foreach/增强for循环
方式三 : Lambda表达式
迭代器遍历概述
- 遍历就是一个一个包容器中的元素访问一遍
- 迭代器在Java中的代表是Iterator,迭代器是集合的专用遍历方式
Collection集合获取迭代器
方法名称 | 说明 |
---|---|
Iterator |
返回集合中的迭代器对象,该迭代器对象默认指向当前集合的0索引 |
Iterator中的常用方法
方法名称 | 说明 |
---|---|
boolean hasNext() | 访问当前位置是否有元素存在,存在返回true,不存在返回false |
E next() | 获取当前位置的元素,并同时将迭代器对象一项下一个位置,注意防止取出越界 |
迭代器越界出现的问题:NoSuchElementException异常
增强for循环
- 增强for循环:既可以遍历集合也可以遍历数组
- 它是JDK5之后出现的,其内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法
- 实现Iterable接口的类才可以使用迭代器和增强for,Collection接口已经实现Iterable接口
格式
for(元素数据类型 变量名:数组或者Collection集合){
//在此处使用变量即可,该变量就是元素
}
//实例
Collection<String> list = new ArrayList<>();
...
for(String ele:list){
System.out.println(ele);
//改变ele的值不会对集合/数组内容进行改变
}
Lambda表达式
- 得益于JDK 8 开始的新技术Lanbda表达式,提供了一种更简单,更直接的遍历集合的方式.
Collection结合Lambda遍历的API
方法名称 | 说明 |
---|---|
default void forEach(Consumer<?super T> action): | 结合lambda遍历集合 |
package com.yu.SingleInstance;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class CollectionTest {
public static void main(String[] args) {
Collection<String> lists = new ArrayList<>();
lists.add("1");
lists.add("2");
lists.add("3");
lists.add("4");
lists.add("5");
System.out.println(lists);
System.out.println("------------------------------------");
lists.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
System.out.println("------------------------------------");
lists.forEach((String s) -> {
System.out.println(s);
}
);
System.out.println("------------------------------------");
lists.forEach(s -> {
System.out.println(s);
}
);
System.out.println("------------------------------------");
lists.forEach(s -> System.out.println(s));
System.out.println("------------------------------------");
lists.forEach(System.out::println);
}
}
答案相同但是书写格式越来越简单
[1, 2, 3, 4, 5]
------------------------------------
1
2
3
4
5
------------------------------------
1
2
3
4
5
------------------------------------
1
2
3
4
5
------------------------------------
1
2
3
4
5
------------------------------------
1
2
3
4
5
又是懒惰的一天
2022.05.16
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通