数组
数组和集合都是容器
数组定义完成并启动后,类型确定,长度固定,在进行增删数据操作的时候,数组是不太合适的,增删数据都需要放弃原有数组或位移
数组适合的场景
当业务数据的个数是固定的,且都是同一批数据类型的时候,可以采用定义数组存储
集合
集合是java中存储对象数据的一种容器
特点
- 集合的大小不固定,启动后可以动态变化,类型也可以选择不固定,集合更像气球
- 集合非常适合做元素的增删操作
注意: 集合中只能存储引用类型数据,如果要存储基本类型数据可以选用包装类
集合类体系结构
- Collection单列集合,每个元素(数据)只包含一个值
- Map双列集合,每个元素包含两个值(键值对)
Collection集合的特点
List系列集合:添加的元素是有序,可重复,有索引
- ArrayList,LinkedList:有序,可重复,有索引
Set系列集合:添加的元素是无序,不重复,无索引 - HashMap:无序,不重复,无索引;LinkedHashSet:有序,不重复,无索引
- TreeSet:按照大小默认升序排序,不重复,无索引
Collection API
Collection它的功能全部单例集合都能继承使用
- add(E e) 把给定的对象添加到当前集合中
- clear() 清空集合中所有的元素
- remove(E e) 把给定的对象在当前集合中删除,只能删除第一个
- contains(Object obj)判断当前集合中是否包含给定的对象
- isEmpty()判断当前集合是否为空
- size() 返回集合中元素的个数
- toArray() 把集合的元素,存储到数组中
- addAll() 把一个集合内容拷贝到另一个集合中
public static void main(String[] args) {
Collection<String> list1 = new ArrayList<>();
Collection<String> list2 = new ArrayList<>();
list1.add("西瓜");
list1.add("南瓜");
System.out.println(list1);
System.out.println(list1);
list1.contains("西瓜");
list1.isEmpty();
list1.size();
list1.toArray();
list2.add("白瓜");
list1.addAll(list2);
System.out.println(list1);
}
集合遍历
迭代器
iterator 迭代器得到的对象,默认指向当前集合的索引0 hasnext next 建议用断点走一走 取元素越界会出现NoSuchElementException
public static void main(String[] args) {
Collection<String> list1 = new ArrayList<>();
list1.add("西瓜");
list1.add("西瓜");
list1.add("西瓜");
list1.add("西瓜");
Iterator<String> iterator = list1.iterator();
while (iterator.hasNext()){
String it = iterator.next();
System.out.println(it);
}
}
foreach遍历/增强for循环
- 即可以遍历集合也可以遍历数组
- 内部原理是一个Iterator迭代器,遍历集合相当于是迭代器的简化写法
- 实现Iterable接口的类才可以使用迭代器和增强for,Collection接口已经实现了Iterable接口
格式
for(元素数据类型 变量名 : 数组或者Collection集合){
使用变量即可
}
Collection<String> list = new ArrayList<>();
for(String it : list){
System.out.println(it);
}
Lambda表达式遍历集合
forEach
public static void main(String[] args) {
Collection<String> list1 = new ArrayList<>();
list1.add("西瓜");
list1.add("西瓜");
list1.add("西瓜");
list1.add("西瓜");
list1.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
list1.forEach(s -> System.out.println(s));
}
|