一、集合的概述
集合是lava中存储对象数据的一种容器。
1)集合特点
①集合的大小不固定,启动后可以动态变化,类型也可以选择不固定。集合更像气球。
②集合非常适合做元素的增删操作
注:集合中只能存储引用类型数据.如果要存储基本类型数据可以选用包装类
2)集合适合的场景
数据的个数不确定,需要进行增刚元素的时候。
集合类体系结构
Collection 单列 张三 王五 李四
Map双列 张三 北京
李四 上海
①Collection单列集合,每个元素(数据)只包含一个值
②Map双列集合,每个元素包含两个值(键值对)
二、Collection集合的体系特点
1)Collectio集合体系
Collection 接口
List Set 实现类
ArrayList LinkedList HashSet TreeSet
LinkedHashSet
2)Collection集合特点
①List系列集合:添加的元素 有序 可重复 有索引
ArrayList LinkedList :有序,可重复 ,有索引
②Set系列集合:添加的元素是无序,不重复,无索引
HashSet:无序,不重复、无索引
LinkedHashSet:有序,不重复,无索引
Treeset:按照大小默认升序排序,不重复,无索引
集合对于泛型的支持
集合都是支持泛型的,可以在编泽阶段约束集合
只能操作某种数据类型
Collection < String> list= new ArrayList<>();
JDK1.7开始后面的泛型类型申明可以省略不写
三、Collection集合常用API
1、 Collection集合
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的。
2、Collection API如下:
- public boolean add (E e)
把给定的对象添加到当前集合中 - public void clear ()
清空集合中所有的元素 - public boolean remove(E e)
把给定的对象在当前集合中删除
(如果多个重复元素默认删除前面的第一个!)
4)public boolean contains (Object obj)
判断当前集合中是否包含给定的对象 - public boolean isEmpty ()
判断当前集合是否为空
6)public int size()
返回集合中元素的个数
7)public Object[] toArray()
把集合中的元素,存储到数组中
package d2_collection_api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// HashSet:添加的元素是无序 , 不重复 ,无索引
Collection list=new ArrayList<>();
//1、添加元素,添加成功返回true
list.add(“java”);
list.add(“哈哈哈”);
list.add(“哈哈哈”);
list.add(“java”);
list.add(“呵呵呵”);
System.out.println(list);
//2、清空集合的元素
// list.clear();
// System.out.println(list);
//3、判断集合是否为空 是空返回true,反之,返回false
System.out.println(list.isEmpty());
//4、获取集合的大小
System.out.println(list.size());
//5、判断集合中是否包含某个元素
System.out.println(list.contains("Java"));//false
System.out.println(list.contains("java"));//true
System.out.println(list.contains("呵呵呵"));//true
//6、删除某个元素:如果有多个重复的元素默认删除前面的第一个
System.out.println(list.remove("Java"));//false
list.remove("java");
System.out.println(list);
//7、把集合转化成数组
Object[] arr=list.toArray();
System.out.println("数组:"+Arrays.toString(arr));
System.out.println("-----------拓展-------------");
Collection<String> c1=new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2=new ArrayList<>();
c2.add("张三");
c2.add("李四");
//addAll把c2集合的元素全部倒入到c1中去
c1.addAll(c2);
System.out.println(c1);
System.out.println(c2);
}
}
四、Collection集合的遍历方式
方式一:选代器
1)迭代器遍历概述
①遍历就是一个一个的把容器中的元素访问一遍
②选代器在Java中的代表是Iterator,选代器是集合的专用遍历方式
2)Collection集合获取选代器
Iterator iterator()
返回集合中的送代器对象,该迭代器对象默认指向当前集合的0索引
3)Iterator的常用方法
<1> boolean hasNext()
询问当前位置是否有元素存在,存在返回true
② E next()
获取当前位置的元素,并同时将迭代器对象移向下一个位置,注意防止取出越界。
package d3_collection_traversal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> list=new ArrayList<>();
list.add("赵敏");
list.add("小赵");
list.add("苏苏");
list.add("灭绝");
System.out.println(list);//[赵敏,小赵,苏苏,灭绝]
//1、得到当前集合的迭代器对象
Iterator<String> it=list.iterator();
// String ele=it.next();
// System.out.println(ele);
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());//NoSuchElementException 出现无此元素异常的错误
while(it.hasNext()) {
String ele=it.next();
System.out.println(ele);
}
}
}
方式二:foreach/增强for循环
1)增强for循环:<1>既可以遍历集合也可以遍历数组
<2>它是JDK5之后出现的,其内部原理是一个Iterator 迭代器,遍历集合相当于是迭代器的简化法。
<3>实现Iterable接口的类才可以使用迭代器和增强for,Collection接口已经实现了 Iterable接口。
格式:for(元素数据类型变量名:数组或Collection集合){
//在此使用变量即可,该变量就是元素
}
package d3_collection_traversal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> list=new ArrayList<>();
list.add("赵敏");
list.add("小赵");
list.add("苏苏");
list.add("灭绝");
for(String ele:list) {
System.out.println(ele);
}//赵敏
//小赵
//苏苏
//灭绝
System.out.println("---------------------------");
double[] scores= {100,999.5,59.5};
for(double score:scores) {
System.out.println(score);
// if(score==59.5) {
// score=90.0;//修改无意义,不会影响数组的元素值。
// }
}
System.out.println(Arrays.toString(scores));//[100,999.5,59.5]
}
}
方式三:Lambda表达式
package d3_collection_traversal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;
public class CollectionDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<String> list=new ArrayList<>();
list.add("赵敏");
list.add("小赵");
list.add("苏苏");
list.add("灭绝");
System.out.println(list);
// list.forEach(new Consumer() {
//
// @Override
// public void accept(String t) {
// // TODO Auto-generated method stub
// System.out.println(t);
// }
// });
//
// list.forEach(t->{
// System.out.println(t);
// });
// list.forEach(t->System.out.println(t));
list.forEach(System.out::println);
}
}
五、Collection 集合存储自定义类型的对象
1、集合中存储的是元素的什么信息?
集合中存储的是元素对象的地址
若不想要看见的是地址,在它的类中重写toSting方法