集合是一种容器,用来装数据,类似于数组,但是集合的大小可变,开发中也经常能用到,为了满足不同的业务场景需求,JAVA还提供了不同特点的集合。
集合体系结构:单列集合(Collection)每个元素只包含一个值、双列集合(Map)每个元素包含两个值,又称为键值对。
一、Collection介绍
单列集合体系Collection<E>:
常用的两个接口:List<E>、Set<E>
List<E>又分为一些实现类比如ArrayList和LinkedList<E>
Set<E>分为一些实现类比如HashSet<E>、TreeSet<E>
二、Collection集合的特点
List系列集合:添加的元素有序、可重复、有索引。
Set系列集合:提那家的元素无序、不重复、无索引。(LinkedHashSet是有序的,TreeSet按照大小默认升序排序)。
public class Test1 {
public static void main(String[] args) {
//简单确认一下Collection集合的特点
ArrayList<String> list = new ArrayList<>();
list.add("一");
list.add("一");
list.add("一");
list.add("二");
list.add("二");
System.out.println(list); //有序,可重复,有索引
HashSet<String> set = new HashSet<>();
set.add("111");
set.add("333");
set.add("222");
set.add("333");
set.add("111");
System.out.println(set); // 无序 不重复 无索引
}
}
三、Collection的常用方法
Collection是但列举集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class Teest2 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>(); //多态写法
//1.添加元素,添加成功返回true
c.add("1");c.add("2");c.add("2");
System.out.println(c);
//2.清空集合
c.clear();
System.out.println(c);
//3.判断是否为空,是空返回true
System.out.println(c.isEmpty());
//4.获取集合的大小
c.add("44");
System.out.println(c.size());
//5.判断是否包含某个元素
System.out.println(c.contains("44"));
//6.删除某个元素:如果有多个默认删除第一个,删除成功返回true
System.out.println(c.remove("44"));
System.out.println(c);
c.add("55");
//7.public Object[] toArray():把集合转换成数组
Object[] o = c.toArray();
System.out.println(Arrays.toString(o));
String[] s = c.toArray(new String[c.size()]); //指定类型数组
System.out.println(Arrays.toString(s));
//8.把一个集合的全部数据放入另一个集合
Collection<String> c1 = new ArrayList<>();
c1.add("111");
c1.add("222");
Collection<String> c2 = new ArrayList<>();
c2.add("121");
c2.add("212");
c1.addAll(c2); //就是把c2集合的全部数据倒入到c1集合中去(数据类型得一样)
System.out.println(c1);
System.out.println(c2); //c2数据不变
}
}
四、Collection的遍历方式
(一)迭代器
迭代器是用来遍历集合的专用方式(数组没有迭代器),Iterator
Collection集合获取迭代器的方法:Iterator<E> iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素。
Iterator迭代器中的常用方法:boolean hasNext() 询问当前位置是否有元素存在
E next() 获取当前位置的元素,并同时将迭代器对象指向下一个元素处
(二)增强for循环
for(元素的数据类型 变量名:数组或集合){
}
增强for可以用来遍历集合或者数组
在idea中可以直接.for然后回车
(三)使用Lambda表达式
需要使用Collection提供的方法结合lambda遍历集合:
逐步简化
五、遍历集合中的自定义对象
public class Movie {
private String name;
double score ;
private String actor;
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
@Override
public String toString() {
return "Movie{" +
"name='" + name + '\'' +
", score=" + score +
", actor='" + actor + '\'' +
'}';
}
public Movie() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
import java.sql.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test5 {
public static void main(String[] args) {
//1.创建一个集合容器负责存储多个电影对象
Collection<Movie> mm = new ArrayList<Movie>();
mm.add(new Movie("电影1",1,"演员1"));
mm.add(new Movie("电影2",2,"演员2"));
mm.add(new Movie("电影3",3,"演员3"));
mm.add(new Movie("电影4",4,"演员4"));
System.out.println(mm);
for (Movie a : mm) {
System.out.println(a.getName());
System.out.println(a.getActor());
System.out.println(a.getScore());
System.out.println("------------");
}
}
}