Java集合框架概述及Collection接口方法讲解

Java集合框架概述

一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象
的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊
端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
1 数组在内存存储方面的特点:
2 数组初始化以后,长度就确定了。
3 数组声明的类型,就决定了进行元素初始化时的类型
4 数组在存储数据方面的弊端:
5 数组初始化以后,长度就不可变了,不便于扩展
6 数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。
同时无法直接获取存储元素的个数
7 数组存储的数据是有序的、可以重复的。---->存储数据的特点单一
8 Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的
关联数组

Java 集合可分为 Collection 和 Map 两种体系

1 Collection接口:单列数据,定义了存取一组对象的方法的集合
List:元素有序、可重复的集合
Set:元素无序、不可重复的集合
2 Map接口:双列数据,保存具有映射关系“key-value对”的集合

Collection接口

Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法
既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。 JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)
实现。 在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都
当成 Object 类型处理;从 JDK 5.0 增加了泛型以后,Java 集合可以记住容
器中对象的数据类型。

Collection接口方法

1、添加
add(Object obj)
addAll(Collection coll) 2、获取有效元素的个数
int size()
3、清空集合
void clear()
4、是否是空集合  boolean isEmpty()
5、是否包含某个元素
boolean contains(Object obj):是通过元素的equals方法来判断是否
是同一个对象
boolean containsAll(Collection c):也是调用元素的equals方法来比
较的。拿两个集合的元素挨个比较。
6、删除
boolean remove(Object obj) :通过元素的equals方法判断是否是
要删除的那个元素。只会删除找到的第一个元素
boolean removeAll(Collection coll):取当前集合的差集
7、取两个集合的交集
boolean retainAll(Collection c):把交集的结果存在当前集合中,不
影响c 8、集合是否相等
boolean equals(Object obj)
9、转成对象数组
Object[] toArray()
10、获取集合对象的哈希值
hashCode()
11、遍历
iterator():返回迭代器对象,用于集合遍历

Java代码讲解部分
package BaiYSTest1;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

/*
 * 一,集合框架的概述
 * 	1,集合,数组都是对多个数据进行存储操作的结构,简称Java容器。
 * 	说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,jpg,avi,数据库)。
 * 
 * 2.1 数组在存储多个数据方面的特点
 * 	 1:一旦初始化以后,其长度就确定了
 * 	 2:数组一旦定义好,其元素的类型也就确定了。我们也就只能操作指定类型的数据了。
 * 		比如:String[] arr;int[] arr1,Object[] arr2;
 * 
 * 2.2数组在存储多个数据方面的缺点:
 * 	1:一旦初始化以后,其长度就不可修改。
 * 	2:数组中提供的方法非常有限,对于添加,删除,插入数据等操作,非常不便,同时效率不高。
 * 	3:获取数组中实际元素的个数的需求,数组没有现成的属性或方法调用。
 * 	4:数组存储数据的特点:有序,可重复。对于无序,不可重复的需求,不能满足。
 * 
 * 
 * 二,集合框架
 *   |--------Collection接口:单列集合,用来存储一个一个的对象
 *   	|----list接口:存储有序的,可重复的数据。 相当于动态数组。
 *   		|----ArraysList,LinkedList,Vector
 *   	|----Set接口:存储无序的,不可重复的数据  相当于高中讲的“集合”(无序,确定,互异)
 *   		|-----HashSet,LinkedHashSet,TreeSet
 *   |--------Map接口 :双列集合,用来存储一对(key-value)一对的数据 相当于高中函数:y=f(x)
 *   	|---HashMap,linkedHashMap,TreeMap,Hashtable,properties
 */
public class CollectionTest {
	public static void main(String[] args) {
		Collection coll = new ArrayList();
		//1  add(Object e):将元素e添加到集合coll中
		coll.add("AAAA");
		coll.add("afaA");
		coll.add("Asdfa");
		coll.add(1234);//自动装箱
		coll.add(new Date());
		
		//2	size():获取添加的元素的个数
		System.out.println(coll.size());//5
		
		//3	addAll(Collection coll1):将coll1集合中的元素添加到当前集合中
		Collection coll1 = new ArrayList();
		coll1.add(8888);
		coll1.add("KK");
		coll1.add("heiheihei");
		coll1.addAll(coll);
		System.out.println(coll1.size());//8
		System.out.println(coll1);
		//[8888, KK, heiheihei, AAAA, afaA, Asdfa, 1234, Mon Mar 23 10:52:23 CST 2020]
		
		//4	clear():清空集合元素
		coll.clear();
		
		//5	isEmpty():判断当前集合是否为空
		System.out.println(coll.isEmpty());
	}
}

package BaiYSTest1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;

/*
 * 继续测试Collection中的方法
 * 
 * 向Collection接口中实现类的对象中添加数据obj时,要求obj所在类重写equals()
 */
public class CollectionTest1 {
	public static void main(String[] args) {
		Collection coll = new ArrayList();
		coll.add(123);
		coll.add(new Date());
		coll.add("heipapap");
		coll.add("baibai");
		coll.add(false);
		coll.add(new Person("Tom",23));
		coll.add(new Person("maruya",23));
		
		//1	contains(Object obj):判断当前集合中是否包含obj
		boolean b1 = coll.contains(123);
		System.out.println(b1);//true
		
		//2	containsAll(Collection coll1):判断形参coll1中所有元素是否都存在于当前集合中
		Collection coll1 = Arrays.asList(123,23,4);
		boolean b2 =coll.containsAll(coll1);
		System.out.println(b2);
		
		//3	remove(Object obj):从当前集合中移除obj元素
		boolean b3=coll.remove(123);
		System.out.println(b3);
		boolean b4 = coll.remove(new Person("Tom",23));
		System.out.println(b4);
		
		//4	removeAll(Collection coll1):从当前集合中移除coll1中所有元素  相当于数学中的差集
		coll.removeAll(coll1);
		System.out.println(coll);
		
		//5	retainAll(Collection coll1):交集:获取当前集合和coll1集合的交集,并返回给当前集合
		coll.retainAll(coll1);
		System.out.println(coll);
		
		//6	equals(Object obj):判断当前集合和形参集合是否都相同
		Collection coll2 = new ArrayList();
		coll2.add(123);
		coll2.add(34);
		coll2.add("afasdf");
		System.out.println(coll.equals(coll2));
		
		//7	hashCode():返回当前对象的hash值
		System.out.println(coll.hashCode());
		
		//8	集合转换为数组:toArray()
		Object[] arr = coll.toArray();
		for(int i =0;i<arr.length;i++){
			System.out.println(arr[i]);
		}
		
		//拓展:数组转换为集合:调用Arrays中的静态方法
		List<String> list = Arrays.asList(new String[]{"aa","bb","cc"});
		System.out.println(list);
		
		List arr1 = Arrays.asList(new int[]{123,456});
		System.out.println(arr1.size());//1
		List arr2 = Arrays.asList(new Integer[]{123,456});
		System.out.println(arr2.size());//2
	}
}

上面Java代码实现部分中要用到的Person类
package BaiYSTest1;

public class Person {
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Person() {
		super();
	}
	public Person(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	//重写equals方法
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}

迭代器下一篇将会展开讲解
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值