Java集合框架
- Java集合框架
- Collection接口API
- Iterator迭代器接口
- Collection子接口之一:Set接口
HashSet LinkedHashSet TreeSet - Collection子接口之二: List接口
ArrayList LinkedList Vector - Map接口
HashMap TreeMap Hashtable - Collections工具类
java集合概述
首先面向对象语言的特点是对事物的体现都是以对象的形式。为了方便对多个对象的操作,就要将对象进行存储,可以采用数组,也可以采用集合的形式。另一方面,使用(数组)Array存储对象方面具有一些弊端,一旦创建长度不可变,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。底层使用的也是数组,但是最大的好处就是可以动态的添加数据。
Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
java集合可以分为Collerction和Map
Collection接口:
Set:元素无序、不可重复的集合 —类似高中的“集合”
List:元素有序,可重复的集合 —”动态”数组
**Map接口:**具有映射关系“key-value对”的集合
Collection接口树
Map接口树
Collection接口是list和set的父接口该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 集合。
在Jdk中不直接提供此接口(Collection)的任何直接实现,而是通过子接口list,set来实现
Collection接口中常用的方法(共15个方法)(也是list和set中通用的方法)比较重要
代码实现 进行所有方法的测试 和总结
package com.ghl.demo;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import org.junit.Test;
public class CollectionDemo {
@Test
public void test1() {
//创建一个集合对象 由于Collection是接口 不能直接new 所以我们那子类list接口下的ArrayList来实现
Collection coll=new ArrayList();
//1.add(Object obj) 向集合中添加一个元素 默认添加的类型是Object类型
coll.add("AA");
coll.add(123);
coll.add(new Date());
//2.size() 返回集合中元素的个数
System.out.println(coll.size());
//3.addAll(Collection coll) 将coll1中所有的元素添加到当前集合cell中
Collection cell1=Arrays.asList(1,12,13);
coll.addAll(cell1);
//4.isEmpty() 判断集合是否为null 返回有个boolean类型
boolean empty = coll.isEmpty();
System.out.println(empty);
//5.clear() 清空集合中的元素
coll.clear();
//查看集合中的元素(后面采用迭代器(Iterator)的方式查看结合中的元素)
System.out.println(coll);
}
@Test
public void test2() {
Collection coll=new ArrayList();
coll.add("AA");//String类型类 默认重写了equals()
coll.add(123);//Integer包装类 默认重写了equals()
coll.add(new Date());//日期类型 默认重写了equals()
coll.add(new Person("ghl",20));//向集合中添加一个自定义对象person
//6.contains(Object obj) 判断集合中是否包含某个元素 如果包含返回true 反之false
//判断依据:根据元素所在类的equals()方法来判断
//如果我们自己定义一个类对象存入集合中需要使用Contains来判断集合是否包含某个对象时 (不要忘了重写equals()方法)
boolean contains = coll.contains(123);
//System.out.println(contains); //true
boolean p = coll.contains(new Person("ghl",20));//我们可以发现,我集合中存入的对象和我需要比较的对象是一摸一样的 可为什么会给我返回false?
//System.out.println("我没重写equals方法,返回的是:"+p); //不重写equals方法返回的是 false 默认使用的是Object类的equals 输出结果:(我没重写equals方法,返回的是:false)
boolean p1 = coll.contains(new Person("ghl",20));//当我们重写equals方法后 看输出结果
//System.out.println("我重写equals方法,返回的是:"+p1); //输出结果:我重写equals方法,返回的是:true
//7.containsAll(Collection coll)判断当前集合是否包含此集合中的元素
Collection coll1=new ArrayList();
coll1.add("AA");
coll1.add(123);
boolean b=coll.containsAll(coll1);
// System.out.println("当前集合是否包含此集合(coll)中的元素:"+b);//输出结果:当前集合是否包含此集合(coll)中的元素:true
//8. retainAll(Collection coll); 两个集合取交集 返回两个集合中共同的元素
coll.retainAll(coll1);
// System.out.println(" 两个集合取交集,拿共同的部分 :"+coll); //输出结果 两个集合取交集,拿共同的部分 :[AA, 123]
//9.remove(Object obj) 删除集合中的obj元素 若成功返回true 反之false
boolean remove = coll.remove("KK");//删除一个不存在的元素
//System.out.println("删除集合中不存在的元素:"+remove);//输出结果:删除集合中不存在的元素:false
//10.removeAll(Collection coll) 相当于差集 在这两个集合中删除共有的元素(在这里就不演示了)
coll.retainAll(coll1);
//11 equals(Object obj) 判断两个集合中的元素是否完全相同
Collection coll2=new ArrayList();//创建一个集合coll2 跟coll1 一模一样 用来判断两个集合中的元素是否相同
coll2.add("AA");
coll2.add(123);
boolean equals = coll1.equals(coll2);
//System.out.println("判断两个集合中的元素是否相同,"+equals);//输出结果:判断两个集合中的元素是否相同,true
// 12.hashcode() 算当前集合的hash值 算出集合中每一元素的hash值 然后采用迭代的方式进行相加 得到集合的hash值
// System.out.println("当前coll集合的hash值是:"+coll.hashCode());//输出结果:当前coll集合的hash值是:65564
//13 toArray() 将集合转化为数组
Object[] array = coll.toArray();//转换为数组
for(int i=0;i<array.length;i++) {//遍历数组中的每一元素
System.out.println(array[i]);
}
//14.iterator() 返回一个Iterator接口的是实现类对象(迭代器遍历)
Iterator iterator = coll.iterator();//结合的遍历 核心方法 hasNext() next()
while(iterator.hasNext()) {//判断集合中是否有下一个元素
System.out.println(iterator.next());//输出集合中元素的值
}
// 15。 toArray(T[] coll) 返回此集合中所有元素的数组,需要指定泛型
}
}
在介绍一种集合遍历方式(增强for)
格式:
for (Object object : coll) {
//Object:集合中元素的类型 因为后去需要指定泛型 所以类型也会统一
//object:变量名 相当于for循环中的int i=0
//coll:具体遍历那个集合
}
总结
Collection作为集合的顶层接口,在学习List集合和Set集合之前,我认为有必要知道List或Set中的很多方法都是从Collection中获得的,及集合的遍历方式,以及集合的整体架构图。
在后面的博客介绍中会详细介绍
- Collection子接口之一:Set接口
HashSet LinkedHashSet TreeSet - Collection子接口之二: List接口
ArrayList LinkedList Vector - Map接口
HashMap TreeMap Hashtable - Collections工具类
的使用