Collection集合及遍历

一、对象数组的概述

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]);
}

1.1集合的由来及集合继承体系图

A:集合的由来
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。
B:数组和集合的区别
(1): 长度区别:
数组的长度是固定的而集合的长度是可变的
(2): 存储数据类型的区别:
数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型
(3): 内容区别:
数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素

1.2 Collection集合的功能概述

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。集合和数组一样是一个容器,可以进行数据的存储,但集合和数组不同的是,集合只能存储引用数据类型,而且集合对数据操作起来比较方便。

1.2.1集合和数组的区别

  1. 长度区别

数组的长度是固定的,而集合的长度是可变的
2. 存储数据类型的区别:

数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型
3.内容区别:

数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素

Collection集合

Collection是一个顶层父接口,他的下面有List和Set两个子接口,而实现类在List ( ArrayList、LinkedList、Vector )和Set(hashSet、TreeSet、LinkedHashSet)接口下,所以在使用Collection集合时,需要用多态来创建,格式如下

Collection collection=new ArrayList();
Collection collection=new Vector();
使用Collection集合我们可以对元素进行增删,判断等功能。但是在使用前,我们需要创建它的实例化对象,使用方法如下:

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 ():返回迭代的下一个元素

Collection集合

Collection集合

遍历的方式

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);
}   

常见的的数据结构

数据结构指的是数据的组存储方式,不同的数据结构有不同的特点。

  1. 数组结构(ArrayList底层结构)
    查询快,增删慢
  2. 链表结构(LinkedList底层结构)
    查询慢,增删快
  3. 栈和队列
    栈:先进后出(子弹夹,杯子)
    队列:先进先出(排队,管子)

并发修改异常产生的原因及解决方案

A:案例演示
需求:我有一个集合,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。

B:ConcurrentModificationException出现
我们用Iterator这个迭代器遍历采用hasNext方法和next方法,集合修改集合 会出现并发修改异常
原因是我们的迭代依赖与集合 当我们往集合中添加好了元素之后 获取迭代器 那么迭代器已经知道了集合的元素个数
这个时候你在遍历的时候又突然想给 集合里面加一个元素(用的是集合的add方法) 那迭代器不同意 就报错了

C:解决方案 我们用ListIterator迭代器遍历 用迭代器自带的add方法添加元素 那就不会报错了
a:迭代器迭代元素,迭代器修改元素(ListIterator的特有功能add)
b:集合遍历元素,集合修改元素

解决方案2 使用for循环遍历集合 添加元素 不会报错

数据结构之栈和队列

各自的特点:
A:数据结构概述及常见数据结构
数据结构其实就是存储数据的格式
分类: 栈 , 队列 , 数组 , 链表 , 树 , 哈希表
B:栈特点: 先进后出
C:队列: 先进先出
数组特点: 查询快 , 增删慢
B:链表特点: 查询慢 , 增删快数组特点: 查询快 , 增删慢
B:链表特点: 查询慢 , 增删快

List的三个子类的特点

ArrayList:
	底层数据结构是数组,查询快,增删慢。
	线程不安全,效率高。
Vector:
	底层数据结构是数组,查询快,增删慢。
	线程安全,效率低。
LinkedList:
	底层数据结构是链表,查询慢,增删快。
	线程不安全,效率高。

例如:List有三个儿子,我们到底使用谁呢?
得看 要安全还是要效率
是查找多还是增删多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值