Collection集合及遍历

it2022-05-05  114

一、对象数组的概述

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集合和数组的区别

长度区别

数组的长度是固定的,而集合的长度是可变的 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集合

遍历的方式

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的三个子类的特点

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

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


最新回复(0)