目录
集合
集合框架定义
集合框架定义:集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。典型地,集合代表形成一个自然组合的数据条目,如一个学生成绩(一个学生姓名和对应课程、以及成绩的映射)。并且在集合定义时,是提供一种存储空间可变的存储模型,存储的数据容量可以发生改变。
集合体系结构
Java集合可以分为两类,Collection单列集合和Map双列集合。所谓单列集合就是指一次只能添加一个数据(如学生),双列集合是指依次能添加一对数据(如学号,学生姓名)。
Collection——集合接口层级的根。一个集合代表一组对象的聚合,这些对象称为这个集合的“元素”。Collection接口提供了一些最通用的方法,通过这些方法可以实现对集合的基本操作。有的集合允许重复的元素,而其他的集合不允许有重复的元素。有些集合是有序的,有些集合是无序的。Java平台并不提供任何对Collection接口的直接实现,但是提供更加详细的对子接口的实现,诸如Set和List接口。
List——一个有序的集合。List可以包含重复的元素,并且List中的元素是有序排列的。因此使用List通常需要对列表中每个元素的插入位置进行精确的控制,并且能通过元素的整数索引(位置)访问元素。
我们先来了解一下单列集合中的List和set的区别,List系列的集合,属于有序集合,添加的元素是有序、可重复、有索引的,提供了方便的访问、插入、删除等操作。
List中的有序指的是存和取的顺序是一致的,存入的位置和取的index一致。可重复就是说存储的数据不去重,均可以存储。有索引是指通过索引可以获得相应的数据。
Set系列集合:添加的元素是无序、不重复、无索引。无序是指保存和取的时候的顺序可能不一致,不重复就是指保存数据不能重复,后面也可以利用这个特性来去重,无索引指不能通过索引来获取Set里的每一个元素。
Collection接口常用方法
方法名称 | 说明 |
int size() | 返回集合中元素的个数/集合的长度 |
boolean contains(Object o) | 判断当前集合中是否包含给定的对象 |
boolean add(E e) | 添加元素到当前集合中 |
boolean remove(Object o) | 将当前集合中的指定元素删除 |
void clear() | 清空结合中的所有元素 |
Collection是单列集合的父类接口,它的功能是全部单列集合都可以继承使用的。其常见的方法有以下内容,size(),返回集合中元素的个数/集合的长度;contains(Object o),是判断当前集合中是否包含给定的对象,add(E e)添加元素到当前集合中,remove(Object o)将当前集合中的指定元素删除,clear(),则是指清空结合中的所有元素。
Collection是一个接口,所以不能通过new 创建对象,所以我们在学习它里面的方法时,只能创建其实现类的对象,我们就先以ArrayList为例。具体方法实现过程如下:
/**
* collection是一个接口,所以不能直接创建它的对象,需要创建它的实现类
*/
Collection<String> collection=new ArrayList<>();
/**
* boolean add(E e)
* 1.add方法,往集合中添加数据
*List中添加的数据可重复,所以add返回均为true;
*set中添加数据不可重复,所以add返回可能会为false;
*/
collection.add("hello");
collection.add("world!");
System.out.println(collection);
/**
* int size()
* 2.size方法 获取集合中元素的长度
*/
int arraySize=collection.size();
System.out.println("ArrayList长度为:"+arraySize);
/**
* boolean contains(Object o)
* 3.contains(Object o)
* 底层是依赖equals方法进行判断是否存在的,所以,如果集合中处处的是自定义对象,也想通过contains
* 方法来判断是否包含,那么在javabean类中,一定要重写equals方法
* ArrayList
*/
//3. boolean contains(Object o); 判断当前集合中是否包含给定的对象
boolean result= collection.contains("hello");
System.out.println(result);
boolean result2= collection.contains("hi");
System.out.println(result2);
//4.boolean remove(Object o) 删除一个不存在的对象时,返回false
boolean flag= collection.remove("world!");
System.out.println("flag:"+flag);
System.out.println(collection);
System.out.println(collection.remove("hi"));
//5.void clear() 清除对象里的内容
collection.clear();
System.out.println(collection);
Collection的通用遍历方式
- 迭代器遍历
- 迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。
- 获取迭代器
- Iterator iterator():返回迭代器对象,默认指向当前集合的0索引。
- Iterator的常用方法:
- hasNext():判断当前位置是否有元素,有元素则返回true,没有则返回false
- next():获取当前位置的元素,并将迭代器对象移向下一个对象
接下来我们来学习一下Collection的通用遍历方式。迭代器遍历、增加for遍历、lambda表达式遍历。之前在数组的时候会使用普通for循环遍历,但是普通for遍历时通过索引遍历出来的,而Set中没有索引,所以普通for只适用于list集合。
什么是迭代器遍历呢,所谓迭代就是一个一个把元素获取出来,迭代器最大的特点,它是不依赖索引的。迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。那么我们如何获取迭代器呢?通过Iterator iterator():iterator方法返回迭代器对象,默认指向当前集合的0索引。获取迭代器后我们怎么使用呢,那我们就简单来看一下Iterator的常用方法,第一个是hasNext(),判断当前位置是否有元素,有元素则返回true,没有则返回false;还有另外一个方法:next():获取当前位置的元素,并将迭代器对象移向下一个对象。
public static void main(String[] args){
//1.创建集合,并添加对象
Collection<String> arrayList=new ArrayList<>();
arrayList.add("hello");
arrayList.add("world");
arrayList.add("!");
// 2.获取迭代器,迭代器就好比一个箭头,默认指向集合的0索引处
// 创建指针
Iterator<String> iterator=arrayList.iterator();
//3.利用循环不断的取获取集合中的每一个元素,hasNext()判断是否有元素
while(iterator.hasNext()) {
//4.next()方法,获取元素,移动指针
String arr = iterator.next();
System.out.println(arr);
}
}
第1步:通过new ArrayList创建集合,并添加对象。第2步:获取迭代器,迭代器就好比一个箭头,默认指向集合的0索引处。我们使用while循环来做元素获取,使用iterator.hasNext()来判断当前位置是否有元素,如果有元素返回true,我们则使用next()做元素的获取,next在做获取的时候还会将指针移到下一个位置。
迭代器是不依赖指针的,它是通过hasNext判断当前位置是否有元素,使用next()获取元素并指针向后移动的。在使用的过程中我们需要注意指针的位置,指针超过后再使用next获取则会报异常。在迭代器遍历的过程中不能通过集合的方法进行增加/删除,但是可以使用迭代器自己的remove方法。在迭代器外边我们可以使用集合的方法进行增加/删除。
迭代器学习完毕了,那么我们再来看一下增加for遍历。增强for遍历的底层是迭代器,它是为了简化迭代器书写的,所有的单列集合和数组才能用增加for遍历。格式如下for(数据类型 变量名:数据/集合){},在使用增加for遍历的时候,需要注意修改增加for中的变量,不会改变集合中原本的数据,因为变量是局部变量,只在方法内生效。而不会改变整体的值。我们来看一下代码:
public static void main(String[] args) {
//1.创建集合,并添加对象
Collection<String> arrayList=new ArrayList<>();
arrayList.add("hello");
arrayList.add("world");
arrayList.add("!");
//2.利用增强for进行遍历
for(String arr:arrayList){
// 修改增加for中的变量,不会改变集合中原本的数据,arr是一个局部变量
// arr="hi";
System.out.println(arr);
}
System.out.println(arrayList);
}
打印的时候如果在里面修改arr的值为hi,循环之后再打印你说ArrayList会是什么呢,打印出来的ArrayList不会改变,因为在增强for中,arr只是一个第三方变量,修改第三方变量并不会修改集合中原本的数据。
connection它是单列集合的顶层接口,它里面所有的方法都被list和set系列的集合所共享,比如说常见的方法:add clear remove Size等,;
有三种通用的遍历方式,第1种浏迭代器遍历,第2中是增加for遍历,第三种就是lambda表达式遍历。