A:案例演示
需求:我有5个学生,请把这5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 Student[] arr = new Student[5]; //存储学生对象 arr[0] = new Student("张三", 23); arr[1] = new Student("李四", 24); arr[2] = new Student("王五", 25); arr[3] = new Student("赵六", 26); arr[4] = new Student("马哥", 20); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }A:集合的由来 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 B:数组和集合的区别 (1): 长度区别: 数组的长度是固定的而集合的长度是可变的 (2): 存储数据类型的区别: 数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型 (3): 内容区别: 数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
数组的长度是固定的,而集合的长度是可变的 2. 存储数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型 3.内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素
Collection是一个顶层父接口,他的下面有List和Set两个子接口,而实现类在List ( ArrayList、LinkedList、Vector )和Set(hashSet、TreeSet、LinkedHashSet)接口下,所以在使用Collection集合时,需要用多态来创建,格式如下
Collection collection=new ArrayList(); Collection collection=new Vector();1.添加功能
boolean add(E e) :向集合中添加对象。 boolean addAll(Collection c) :将一个集合中的所有元素添加到另一个集合中。2.删除功能
void clear():移除集合中的所有元素。 boolean remove(Object o):移除集合中的一个元素。 boolean removeAll(Collection c):移出一个集合中与c集合的交集元素,c集合中的元素不变。如果删除成功返回true,否则为false。3.判断功能
boolean contains(Object o):判断集合中是否包含该指定的元素 。 boolean containsAll(Collection c):判断一个集合是否是另一个集合的子集,如果是返回 true 否者为false。 boolean isEmpty():判断集合是否为空。4.获取功能
集合中可以通过 for 循环进行遍历每个元素,也可以通过迭代器(Iterator)进行获取每个元素。迭代器中有两个方法:
boolean hasNext ():如果仍有元素可以迭代,则返回 true。 E next ():返回迭代的下一个元素1.普通遍历(必须要有索引,可以修改元素)
ArrayList<String> list=new ArrayList<>(); c.add("Hello"); c.add("Java"); c.add("World"); for(int i=0;ilist.size();i++){ String s=(String)list.get(i); System.out.println(s); }2.迭代器遍历 (任何集合都可以遍历,只能获取元素)
Collection<String> c=new ArrayList<String>(); c.add("Hello"); c.add("Java"); c.add("World"); //获取迭代器对象 Iterator<String> it=c.iterator(); //hasNext()判断是否有下一个元素,如果有就用next()获取 while(it.hasNext()){ //获取下一个元素 String s=it.next(); System.out.println(s); }3.高级for循环
Collection<String> coll=new ArrayList<String>(); coll.add("Hello"); coll.add("Java"); coll.add("World"); //高级for遍历集合 for(Stirng s:coll){ System.out.println(s); } int[] arr={1,2,3,4,5,6}; //高级for遍历数组 for(int a:arr){ System.out.println(a); }数据结构指的是数据的组存储方式,不同的数据结构有不同的特点。
数组结构(ArrayList底层结构) 查询快,增删慢链表结构(LinkedList底层结构) 查询慢,增删快栈和队列 栈:先进后出(子弹夹,杯子) 队列:先进先出(排队,管子)A:案例演示 需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。
B:ConcurrentModificationException出现 我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常 原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数 这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了
C:解决方案 我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了 a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add) b:集合遍历元素,集合修改元素
解决方案2 使用for循环遍历集合 添加元素 不会报错各自的特点: A:数据结构概述及常见数据结构 数据结构其实就是存储数据的格式 分类: 栈 , 队列 , 数组 , 链表 , 树 , 哈希表 B:栈特点: 先进后出 C:队列: 先进先出 数组特点: 查询快 , 增删慢 B:链表特点: 查询慢 , 增删快数组特点: 查询快 , 增删慢 B:链表特点: 查询慢 , 增删快
例如:List有三个儿子,我们到底使用谁呢? 得看 要安全还是要效率 是查找多还是增删多