1)什么是集合?有什么用?
数组其实就是一个集合。集合实际上就是一个容器。可以用来容纳其他类型的数据。
集合为什么说在开发中使用较多?
集合是一个容器,是一个载体,可以一次容纳多个对象。
在实际开发中,假设连接数据库,数据库当中有10条记录,
那么假设把这10条记录查询出来,在java程序中会将10条
数据封装成10个java对象,然后将10个java对象放到某一个
集合当中,将集合传到前端,然后遍历集合。将一个数据一个
数据展现出来。
2)集合中存储的是引用。
集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,
集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100);//自动装箱Integer
注意:
集合在java中本身是一个容器,是一个对象。
集合中任何时时候存储的都是"引用"。
3)在java中每一个不同的集合,底层会对于不同的数据结构。往不同的集合中
存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的
结构就是数据结构。不同的数据结构,数据存储方式不同。例如:
数组,二叉树,链表,哈希表…
以上这些都是从常见的数据结构。
你往集合c1中放数据,可能是放到数组上了。
你往集合c2中放数据,可能是放到二叉树上了。
…
你是要不同的集合等同于使用不同的数据结构。
new ArrayList(); 创建一个集合,底层是数组。
new LinkedList(); 创建一个集合对象,底层是链表。
new TreeSet(); 创建一个集合对象,底层是二叉树。
4)集合在java JDK中哪个包下?
java.util.*;
所有的集合类和集合接口都在java.util包下。
5)集合的继承结构图背会!
6)在java中集合分为两大类:
一类是单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口: java.util.Collection;
一类是以键值对儿的方式存储元素:
以键值对的方式存储元素,这一类集合中超级父接口: java.util.Map;
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest01 {
public static void main(String[] args) {
//创建一个集合对象
//Collection c=new Collection();//接口是抽象的,无法实例化。
//多态
Collection c=new ArrayList();
//测试Collection接口中的常用方法:
//1.c.add(),添加元素
c.add(1200);//自动装箱,实际上是放进去了一个对象的内存地址。Integer x=new Integer(1200);
c.add(3.14);//自动装箱
c.add(new Object());
c.add(new Student());;
c.add(true);
//2.c.size(),获取集合中元素的个数
System.out.println("集合中的元素个数:"+c.size());// 5
//3.c.clear(),清空集合
c.clear();
System.out.println("集合中的元素个数:"+c.size());// 0
//再次向集合中添加元素
c.add("Hello");//"Hello"对象的内存地址存到了集合当中
c.add("World");
c.add("浩克");
c.add("花木兰");
//4.c.contains(Object o),判断集合中是否包含某个元素
boolean flag=c.contains("浩克");
System.out.println(flag);//true
boolean flag2=c.contains("浩克2");
System.out.println(flag2);//false
//当前集合中的元素个数5
System.out.println("集合中的元素个数:"+c.size());// 5
//5.c.remove(),删除集合中指定元素
c.remove("浩克");
System.out.println(c.contains("浩克"));//false
System.out.println("集合中的元素个数:"+c.size());// 4
//6.c.isEmpty(),判断集合是否为空
System.out.println(c.isEmpty());// false
c.clear();//清空集合
System.out.println(c.isEmpty());// true
//再次添加元素
c.add("abc");
c.add("HelloWorld!");
c.add("efg");
c.add(new Student());
//7.c.toArray(),转换成数组(了解,使用不多)
Object[] obj=c.toArray();
for(int i=0;i
System.out.print(obj[i].toString()+" ");
}
System.out.println();
}
}
class Student{
}
4.迭代专题
样例1(迭代器的使用)
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class CollectionTest02 {
public static void main(String[] args) {
//注意: 以下的遍历方式/迭代方式,是所有Collection通用的一种方式。
//在Map集合中不能用。在所有的Collection以及子类中使用。
//创建集合对象
Collection c=new ArrayList();//后面集合无所谓,主要看前面的Collection接口,怎么遍历/迭代。
//添加元素
c.add(100);
c.add("abc");
c.add("def");
c.add(new Object());
//对集合Collection进行遍历/迭代
//第一步: 获取集合对象的迭代器对象Iterator
Iterator it=c.iterator();
//第二步: 通过以上获取的迭代器对象开始迭代/遍历集合
while (it.hasNext())
{
//这样写许
//这样也许
System.out.println(it.next());
}
}
}
样例2(迭代器是通用的)
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
public class CollectionTest03 {
public static void main(String[] args) {
//创建集合对象
Collection c1=new ArrayList();//ArrayList集合:有序可重复
//添加元素
c1.add(1);
c1.add(2);
c1.add(3);
c1.add(4);
c1.add(1);
//迭代集合
Iterator it=c1.iterator();
while(it.hasNext())
{
//存进去是什么类型,取出来就是什么类型。
Object obj=it.next();
//只不过在输出的时候会转换成字符串。因为这里println会调用toString()方法。
System.out.println(obj);
}
//HashSet集合: 无序不可重复
Collection c2=new HashSet();
//无序:存进去和取出来的顺序不一定相同。
//不可重复: 存储100,不能再存储100
c2.add(100);
c2.add(400);
c2.add(300);
c2.add(100);
Iterator it2=c2.iterator();
while(it2.hasNext())
{
System.out.println(it2.next());
}
}
}
5.深入Collection的conatins方法
1)contain方法底层调用equals方法
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest04 {
public static void main(String[] args) {
//创建集合对象
Collection c=new ArrayList();
//向集合中存储元素
String s1=new String("abc");
c.add(s1);
String s2=new String("def");
c.add(s2);
String s3=new String("abc");
//集合的元素个数
System.out.println("元素的个数是:"+c.size());
System.out.println(c.contains(s3));//true
}
}
2)测试contains方法
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;
public class CollectionTest05 {
public static void main(String[] args) {
//创建集合对象
Collection c=new ArrayList();
//创建用户对象
User u1=new User("jack");
//加入集合
c.add(u1);
//判断集合中是否包含u2
User u2=new User("jack");
//没有重写equals之前: 这个结果是false
//System.out.println(c.contains(u2));// false
//重写equals之后.比较的时候会比较name
System.out.println(c.contains(u2));// true
//x.equals(y)--->true
}
}
class User{
private String name;
public User(){}
public User(String name){
this.name=name;
}
//重写equals方法
//这个equals方法比较原理是: 只要姓名一样就表示同一个用户。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof User)) return false;
User u = (User) o;
return u.name.equals(this.name);
}
}
6.深入Collection的remove方法
package com.jmpower.javase.collection;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest06 {
public static void main(String[] args) {
//创建集合对象
Collection c=new ArrayList();
//创建用户对象
User u1=new User("jack");
//加入集合
c.add(u1);
//remove之前的集合大小
System.out.println(c.size());// 1
User u2=new User("jack");
c.remove(u2);
//remove之后的集合大小
System.out.println(c.size());// 0
}
}
class User{
private String name;
public User(){}
public User(String name){
this.name=name;
}
//重写equals方法
//这个equals方法比较原理是: 只要姓名一样就表示同一个用户。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof User)) return false;
User u = (User) o;
return u.name.equals(this.name);
}
}
7.Collection接口中的contains方法和remove方法底层都会重写equals。


