- 了解掌握什么是Collection(集合)?
- 重点掌握集合中集合中ArrayList的使用?
- 重点掌握iterator(迭代器)的使用?
- 重点掌握增强for循环的使用?
集合
概述
数组和集合都是Java中提供的容器
集合: 英文译为 Collection,用来存放对象的容器,集合中可以存放不同类型的对象,并且集合的长度可变。
在编程时,常常需要集中存放多个数据,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组就有点无能为力了;
为了保存数量不确定的数据,以及保存具有映射关系的数据,Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
小结: 集合和数组的对比:
-
数组中的元素可以基本类型的值,也可以是对象; 而集合中只能保存对象
-
数组一旦指定了长度,长度就不能再改变; 而集合的长度是可以随时改变的
-
往数组中插入元素非常麻烦,需要将插入位置后面的元素往后移动; 或者删除数组中间位置的某一个元素, 需要将删除位置后的元素往前移动; 而如果往集合中插入元素或者删除集合中的某一个元素,直接使用现成的方法操作即可
集合的继承结构
由于需求不同,Java就提供了不同的集合类。这多个集合类的数据结构不同,但是它们都是要提供存储和遍历功能的,我们把它们的共性不断的向上提取,最终就形成了集合的继承体系结构图。
Collection集合是所有单值集合的顶层接口, 其中定义了常用的用于操作集合以及集合中元素的方法
例如: 添加元素、删除元素、获取元素、获取集合长度、判断功能、将集合转成数组、迭代器遍历元素等功能
List
概述
List是一个有序的Collection(List是Collection的子接口),使用此接口能够精确的控制每个元素插入的位置,能够通过索引(类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
List 接口存储一组可重复、有序(插入顺序)的对象。
特点
-
元素有下标,可以通过下标访问元素
-
元素是有序的(存入集合的顺序和取出的顺序一定相同)
-
元素可以重复
-
常用实现类:
- java.util.ArrayList:内部使用的是数组,查询性能很好
- java.util.LinkedList:内部使用的是链表,增删性能很好
对性能要求不是特别苛刻的情况下,通常使用ArrayList
实例1:ArrayListDemo
package arraylistdemo;
import java.util.ArrayList;
/**
* JAVA集合框架
* 集合和数组一样,都是保存一组元素的工具,但是集合将元素的操作都封装了方法,操作非常简便
* 并且集合提供了很多的不同的实现供我们使用
* java.util.Collection是所有集合的顶级接口,里面定义了所有的集合都必须要具备的功能和方法
* 集合中有两类常用的子类:
* java.util.List: 可重复的集合,且有序,通过称之为线性表
* java.util.Set: 不可重复的集合
*/
public class CollectionDemo1 {
public static void main(String[] args) {
//集合中只能存放引用类型
ArrayList<String> arrayList = new ArrayList();
/*
* JDK5之后,还推出了一个特性:泛型
* 泛型也称为参数化类型,他的原型就是Object,
* 泛型的目的是让我们将定义的Object类型当做什么看待
* 如果不指定泛型,那么类型当成Object类型,如果指定了E的类型,
* 所有设置到的E的位置都变成对应类型
* public class User<E>{
* public E getName(E e)
* }
* User<String> a = new User();
* String d = a.getName("ccc");
* */
/*
* 向集合添加元素
* 需要调用add方法" boolean add(E e) 这个E是泛型,这里先理解为是Object
* 向指定的集合添加元素,如果元素添加成功,返回true,否则返回false
* */
arrayList.add("one");//add:直接传入需要添加的元素即可
arrayList.add("two");
arrayList.add("three");
arrayList.add("four");
arrayList.add("five");
System.out.println(arrayList);//[one, two, three, four, one]
// arrayList.remove(0);//remove:根据传入的下标,返回该集合中对应的数据
System.out.println(arrayList);
int size = arrayList.size();//size();获取集合的长度
System.out.println("集合的长度:"+size);
boolean empty = arrayList.isEmpty();//判断集合是否为一个空集,当size=0是,也就是空集,返回true
System.out.println("集合是否为空集:"+empty);
arrayList.set(0,"one1");//set方法可以根据传入的下标和修改数据修改下标对应的数据
// arrayList.clear(); //clear 方法可以清空当前集合中的所有元素
System.out.println(arrayList.contains("one1"));//判断是否包含传入元素.
String[] strs= arrayList.toArray(new String[0]);//将集合元素转换为数组存储
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
List<String> list = Arrays.asList(strs);//将数组转换为集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
集合的遍历
IteratorDemo
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* 集合的遍历
* 集合支持遍历操作,我们可以通过遍历最终结果拿到每一个元素
* 集合提供了一种遍历的方式:迭代器模式
* 对应方法
* Iterator iterator()
* 该方法会返回一个用于遍历当前集合的迭代器对象
* java.util.Iterator是迭代器接口,定义了迭代器遍历集合的基本操作,所有的集合够提供了用于遍历
* 自身的元素的迭代器的实现类,我们无需记忆他们的名字,用多态的思想统一看做是Iterator对象即可
* 迭代器遍历集合遵循的步骤:问->取->删.其中删除不是必须的操作
*/
public class IteratorDemo {
public static void main(String[] args) {
ArrayList arrayList = new ArrayList();
arrayList.add("one");
arrayList.add("#");
arrayList.add("two");
arrayList.add("#");
arrayList.add("three");
arrayList.add("#");
arrayList.add("four");
arrayList.add("#");
arrayList.add("five");
System.out.println(arrayList);
//获取当前集合的迭代器对象
Iterator it = arrayList.iterator();
/*
* boolean hasNext()
* 判断集合中是否还有下一个元素可以遍历,迭代器的起始位置可以理解为是集合中第一个元素之前,
* 因此第一次调用hasNext()就是判断集合中是否有第一个元素
* E next()
* 获取集合中下一个元素,获取后迭代器的位置就会自动向后移动一个元素
* */
while (it.hasNext()){
String next = (String) it.next();
System.out.println(next);
//判断遍历的元素是否是'#'
if("#".equals(next)){
//如果是'#',就删除
/*
* 迭代器在遍历的过程中,不能通过集合的方法来增删元素,否则会抛异常:
* java.util.ConcurrentModificationException
* */
//c.remove(next);
/*
* 迭代器提供了remove方法,可以将本次通过next方法获取到的元素从集合中删除
* */
it.remove();
}
}
System.out.println(arrayList);
}
}
增强型for循环
NewForDemo
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* JDK5推出时,推出了一个新特性:增强型for循环
* 通过也称为新循环
* 新循环并不能取代传统for循环的工作,只能为了使用相同的语法来遍历集合或者数组
* 语法:
* for(元素类型 e : 遍历的集合或者数组){
* 输出元素e
* }
*/
public class NewForDemo {
public static void main(String[] args) {
String[] array = {"one","two","three","four","five"};
//传统for循环遍历 array.fori
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
//新循环遍历数组 array.for
for( String e : array ){
System.out.println(e);
}
ArrayList<String> arrayList = new ArrayList();
arrayList.add("一");
arrayList.add("二");
arrayList.add("三");
arrayList.add("四");
arrayList.add("五");
for( String s : arrayList){
System.out.println(s);
}
arrayList.forEach(new Consumer<String>() {
@Override
public void accept(String v) {
System.out.println("匿名内部类遍历:" + v);
}
});
arrayList.forEach((String v) -> {
System.out.println("lambda遍历:" + v);
}
);
//参数类型可忽略
//参数如果只有一个,小括号也可以省略
//执行逻辑只有一行,花括号可不写
arrayList.forEach(v -> System.out.println("lambda遍历:" + v));
}
}
总结
1. 什么是Collection(集合)?
答:数组和集合都是Java中提供的容器,集合用来存放对象的容器,集合中可以存放不同类型的对象,并且集合的长度可变。
2. 集合中集合中ArrayList是什么,如何使用?
答:内部使用的是数组,查询性能很好. ArrayList在使用时可以通过泛型指定该集合对象可存储的数据类型。
ArrayList<String> alist = new ArrayList(); 该集合对象只能存储String类型的数据
3. iterator(迭代器)的使用?
答: 迭代器遍历集合遵循的步骤:问->取->删.其中删除不是必须的操作。
/*
* boolean hasNext()
* 判断集合中是否还有下一个元素可以遍历,迭代器的起始位置可以理解为是集合中第一个元素之前,
* 因此第一次调用hasNext()就是判断集合中是否有第一个元素
* E next()
* 获取集合中下一个元素,获取后迭代器的位置就会自动向后移动一个元素
* void remove()
* 删除当前获取到的元素
* */
4. 增强for循环是什么,如何使用?
答:JDK5推出时,推出了一个新特性:增强型for循环,新循环不能替代传统for的循环工作,只能为了使用相同的语法来遍历集合或者数组.
语法:
for(元素类型 e : 遍历的集合或者数组){
输出元素e
}
上篇文章:入门Java编程的知识点—>线程安全(day16)-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/141553816下篇文章: 入门Java编程的知识点—>Map(day18)-CSDN博客https://blog.csdn.net/Z0412_J0103/article/details/141554619