java集合
集合的引入
- 利用对象数组,保存学生对象
*
* 数组特点
* 查询快:根据下标查询元素
* 缺点:增删慢
* 数组中可以保存java中的任何类型
*
* 数组的大小被固定了,增删很麻烦
* 如何解决这个问题了?
* 容积收放自如,扩容和缩容的操作不需要程序员来做,大大提高了效率
* 使用集合
*
public class Demo {
//类Student 省略
public static void main(String[] args) {
//1:创建学生数组
Student[] stu = new Student[3];
stu[0] = new Student("张三", 20, "男");
stu[1] = new Student("王秀", 30, "女");
stu[2] = new Student("李喆", 40, "男");
for (Student s : stu) {
System.out.println(s.toString());
}
}
}
集合分类
* Collection 接口
* 子: List接口 Set接口
* List接口
* 实现类:
* ArrayList
* LinkedList
* Set接口
* 实现类:
* HashSet
* LinkedHashSet
* TreeSetMap 接口 * 实现类 * HashMap * LinkedHashMap *
TreeMap
- Collection:
* Collection 层次结构 中的根接口。
* Collection 表示一组对象,这些对象也称为 collection 的元素。
* 1: 一些 collection 允许有重复的元素,且是有序的,(有序:插入的顺序和遍历的顺序是一致的)
* 所以数组也算集合的一种数据结构 重复且有序
* 2: 一些 collection 不允许有重复的元素,且是无序的,
*
* 父接口:Iterable
* 子接口:List,Set
* 从以下版本开始: 1.2
*
* 注意:集合只能存储引用类型,不能存储基本类型
* 数组既能存储基本类型,也能存储引用类型
*
* 常用方法
* 创建 Collection coll = new ArrayList<>();
* 增加 add(Object obj)
* 长度 size();
* 删除 remove(Object obj) 删除一个
* removeAll(Collection coll) 删除多个
* 清空:clear();
* 修改 :???
* 查询:???
* 判断:contains(Object o)
* 遍历
*
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
/*
*
*/
public static void main(String[] args) {
//1:创建一个集合 空集合
Collection coll = new ArrayList<>();
//2:添加元素
coll.add(1);
coll.add(2);
coll.add(3);
coll.add(4);
//3:查看集合的长度 返回此 collection 中的元素数。
System.out.println(coll.size());
//4:删除集合的元素
System.out.println("移除前:"+coll);
System.out.println("remove:"+coll.remove(100));
System.out.println("移除后:"+coll);
//5:清空集合
//coll.clear();
System.out.println("清空后:"+coll);
//6:判断集合是否有此元素,有返回true,反之返回false
System.out.println("是否包含:"+coll.contains(100));
//7:判断集合是否为空,为空返回true,反之为false
System.out.println("是否为空:"+coll.isEmpty());
}
}
- Collection 操作多个元素
*
* addAll(Colletion coll) 一次添加多个元素
* containsAll(Collection c) 是否包含多个元素
* removeAll(Collection c) 一次删除多个元素
* retainAll(Collection c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo2 {
/*
。
*
*/
public static void main(String[] args) {
//1:创建集合
Collection coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
Collection coll2 = new ArrayList<>();
coll2.add("a");
coll2.add("b");
coll2.add("g");
//1 一次添加多个元素
/*coll.addAll(coll2);
System.out.println("coll:"+coll);
System.out.println("coll2:"+coll2);*/
//2是否包含多个元素 全包含返回true,否则返回false
//System.out.println(coll.containsAll(coll2));
//3:一次删除多个元素 谁调用,就删除谁
//coll.removeAll(coll2);
//4:求集合的交集 谁调用,保留谁
System.out.println(coll.retainAll(coll2));
System.out.println("coll:"+coll);
System.out.println("coll2:"+coll2);
}
}
Collection遍历
* 遍历方式1 toArray()
* 转数组遍历
* 遍历方式2 迭代器
* iterator()
*
* Iterator:对 collection 进行迭代的迭代器
* 从以下版本开始: 1.2
* 迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:
* 1 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
* 2 方法名称得到了改进。
*
* next:返回集合的下一个元素
* hasNext:判断是否有下一个元素
*
* 面试题:集合在迭代的时候,可不可以做修改
* 集合本身不能删除元素 ,集合删除会出现并发修改异常
* 迭代器可以删除元素
*
* 注:迭代器是依赖于集合而生,没有集合就没有迭代
- 作业:1 添加整型,并遍历 * 2 添加字符串,并遍历 * 3 添加Student对象,并遍历
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo3 {
public static void main(String[] args) {
//1:创建集合
Collection coll = new ArrayList<>();
coll.add("a");
coll.add("b");
coll.add("c");
coll.add("d");
//2:将集合转为数组
//遍历方式1
Object[] arr = coll.toArray();
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
System.out.println("----------------");
for(Object o:arr){
System.out.println(o);
}
System.out.println("----------------");
//遍历方式2 迭代器遍历
Iterator it = coll.iterator();
while(it.hasNext()){
Object obj = it.next();
//coll.remove(obj); //ConcurrentModificationException 并发修改异常
System.out.println(obj);
it.remove(); //迭代器可以删除集合的元素
}
System.out.println(coll);
//System.out.println(coll);
//System.out.println(it.next()); //NoSuchElementException 没有此元素
}
}
未完待续~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~