集合的认识与增删改查
1 集合
1.1 什么是集合
存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。
1.2 集合和数组的区别
数组和集合都是容器
数组特点:大小固定,只能存储相同数据类型的数据
集合特点:大小可动态扩展,可以存储各种类型的数据
1.2.1 数组的缺点
存储类型单一的数据容器,操作复杂(数组一旦声明好则不可变)CRUD
1.3集合的分类
集合做什么
- 将对象添加到集合中
- 从集合中删除对象
- 从集合中修改一个对象
- 从集合中查找一个对象
也就是增删改查
注意:集合和数组中存放的都是对象的引用而非对象本身
Java工程师对不同的容器进行了定义,虽然容器不同,但是还是有一些共性可以抽取,最后抽取了一个顶层接口,那么就形成了一个集合框架。如何学习呢?当然是从顶层学起,顶层里边具有最共性,最基本的行为。具体的使用,就要选择具体的容器了。为什么?因为不断向上抽取的东西有可能是不能创建对象的,抽象的可能性很大,并且子类对象的方法更多一些。所以是看顶层,创建底层。那么集合的顶层是什么呢?叫做Collection
集合框架体系
19.jpg
20.png
为什么出现这么多集合容器,因为每个容器对数据的存储方式不同,这种存储方法称之为数据结构(data structure)
注意:集合和数组中存放的都是对象的引用
1.4 什么时候该使用什么样的集合
21.png
2 集合类
Collection接口有两个子接口
- List(链表|线性表)
- Set(集)
特点:
Collection中描述的是集合共有的功能(CRUD)
- List可存放重复元素,元素存取是有序的
- Set不可存放重复元素,元素存取是无序的
java.util.Collection
---| Collection 描述所有接口的共性
---| List 接口 可以有重复元素的集合
---| Set 接口 不可以有重复元素的集合
- 学习集合对象
学习Collection中的共性方法,多个容器在不断向上抽取就体现了该体系。发现Collection接口中具有所有容器都具备的共性方法。查阅API时,就可以直接看到该接口中的方法。
并创建其子类对象对集合进行基本应用。当要使用集合对象中特有的方法,再查看子类具体的内容。
查看api文档Collection在java.util中(注意是大写Collection)
注意现阶段遇到的E T之类的类型,需要暂时理解为object,因为涉及到后面学习的泛型。 -
创建集合对象,使用Collection中的List的具体实现类ArrayList
Collection coll = new ArrayList();
2.1 Collection接口的共性方法
增加:
1. add() 将指定对象存储到容器中
add方法的参数类型是Object,可以存储任意数据类型
2. addAll() 将指定集合中的元素添加到调用该方法和集合中
删除:
3. remove() 将指定的对象从集合中删除
4. removeAll() 将指定集合中的元素删除
修改:
5. clear() 清空集合中的所有元素,但是容器还是在的。
判断:
6. isEmpty() 判断集合是否为空
7. contains() 判断集合中是否包含指定对象
8. containsAll() 判断集合中是否包含指定集合
使用equals()判断两个对象是否相等
获取:
9. int size() 返回集合容器的大小
转换成数组:
10. toArray() 将集合转换成数组
下面分别用实例进行说明
2.1.1 增加:
package itcast01;
import java.util.Collection;
import java.util.ArrayList;
public class ArrayListDemo {
//增加: add() 将指定对象存储到容器中
public static void main(String[] args) {
//接口的多态,ArrayList是Collection接口的实现类。创建了ArrayList实现类的对象coll。
Collection coll = new ArrayList();
//向容器中添加元素
coll.add("计算机网络");
coll.add("现代操作系统");
coll.add("数据库原理");
coll.add("Java编程思想");
}
}
2.1.2 删除:
package itcast01;
import java.util.Collection;
import java.util.ArrayList;
public class ArrayListDemo {
//增加: add() 将指定对象存储到容器中
public static void main(String[] args) {
//接口的多态,ArrayList是Collection接口的实现类。创建了ArrayList实现类的对象coll。
Collection coll = new ArrayList();
coll.add("计算机网络");
coll.add("现代操作系统");
coll.add("数据库原理");
coll.add("Java编程思想");
//删除集合中的指定元素
boolean remove = coll.remove("Java编程思想");
System.out.println(remove);//true
System.out.println(coll);
//删除集合中的全部元素
boolean removeAll = coll.removeAll(coll);
System.out.println(coll);
/*输出结果:
* true
* [计算机网络, 现代操作系统, 数据库原理]
* []
* */
}
}
2.1.3 修改
package itcast.demo02;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("java编程");
coll.add("操作系统原理");
coll.add("计算机网络");
coll.add("数据库原理");
System.out.println(coll);
//Collection集合的修改,使用方法clear
coll.clear();
System.out.println("*******分割线********");
System.out.println(coll);
}
}
输出:
[java编程, 操作系统原理, 计算机网络, 数据库原理]
*******分割线********
[]
2.1.4 判断,获取元素个数,转换成数组
package itcast.demo02;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection coll = new ArrayList();
coll.add("java编程");
coll.add("操作系统原理");
coll.add("计算机网络");
coll.add("数据库原理");
System.out.println(coll);
//判断,判断集合中是否包含指定对象
//首先应该判断一下集合是否为空
if(!coll.isEmpty()) {
boolean b = coll.contains("网页制作三剑客");
boolean b1 = coll.contains("计算机网络");
System.out.println(b);
System.out.println(b1);
}
//获取集合元素的个数
System.out.println(coll.size());
//将集合转换为数组,注意此处的返回值类型是Object,因为上面的集合coll并没有指定存储的数据类型。
Object[] s = coll.toArray();
//打印数组
for(int i=0 ; i<coll.size(); i++) {
System.out.println(s[i]);
}
}
}
输出:
[java编程, 操作系统原理, 计算机网络, 数据库原理]
false
true
4
java编程
操作系统原理
计算机网络
数据库原理
2.1.5 练习:集合中添加自定义对象
package itcast.demoLX;
public class Person {
private String name;
private int age;
//重写Person类的toString方法
public String toString() {
//System.out.println("姓名:"+name+" "+"年龄:"+age);
return "姓名:"+name+" "+"年龄:"+age;
}
/* 重写equals方法,如果不重写的话,调用Object类的equals方法,判断内存地址,为false
* 如果是Person类对象,并且姓名和年龄形同就返回true
*/
public boolean equals(Object obj) {
if(!(obj instanceof Person)) {
return false;
}
Person p = (Person) obj;
return this.name.equals(p.name) && this.age == p.age;
}
//满参构造器
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public int getAge() {
return this.age;
}
}
//测试
package itcast.demoLX;
import java.util.ArrayList;
import java.util.Collection;
public class TestDemo {
public static void main(String[] args) {
//创建集合对象
Collection<Person> coll = new ArrayList<Person>();
//向集合中添加元素
coll.add(new Person("张三",20));
coll.add(new Person("李四",21));
coll.add(new Person("王二",22));
coll.add(new Person("赵六",23));
coll.add(new Person("钱五",24));
//打印集合
System.out.println(coll);//打印出来的都是元素的内存地址,也就是调用的是Object的toString方法,所以我们需要对Person重写toString方法
}
}













网友评论