集合是一种容器,用来装数据,类似于数组,但是集合的大小可变,开发中也经常能用到,为了满足不同的业务场景需求,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.添加元素,添加成功返回truec.add("1");c.add("2");c.add("2");System.out.println(c);//2.清空集合c.clear();System.out.println(c);//3.判断是否为空,是空返回trueSystem.out.println(c.isEmpty());//4.获取集合的大小c.add("44");System.out.println(c.size());//5.判断是否包含某个元素System.out.println(c.contains("44"));//6.删除某个元素:如果有多个默认删除第一个,删除成功返回trueSystem.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;}@Overridepublic 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("------------");}}
}