Collection集合的使用

1. 创建Collection集合并添加元素

添加元素的方法

  • public boolean add(E e) 向集合中添加一个元素或则能看成一个整体的元素。
  • public boolean addAll(Collection<? extends E> c) 向集合中添加另一个集合中的元素,方式是一个一个的添加。
package 集合;

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

public class CollectionTest {
	
	public static void main(String[] args) {
		/*
		 创建一个Collection集合,Collection是一个接口不能直接进行实例化,利用多态的性质,接口类型的引用指向实现类的对象。
		*/
		Collection c1 = new ArrayList();
		//当与字符串进行拼接时,自动调用toString方法,此处为ArrayList类中的toString方法,默认格式:[元素1, 元素2, ...]
		System.out.println("集合中的内容是:" + c1); //打印出:[ ]
		
		//向集合中添加元素
		boolean b = false;
		b = c1.add(new String("one")); //String类中已经重写了hashCode方法和equals方法。
		System.out.println(b);
		b = c1.add(Integer.valueOf(1));//Integer类中已经重写了hashCode方法和equals方法。
		System.out.println(b);
		b = c1.add(new Person("zhoufengbin",24)); //需要创建一个Person类,Person类需要重写toString方法。
		
		//打印集合中的元素时,本质上就是打印集合中的每个对象 => 每个对象都会自动调用对应类的toString方法。
		System.out.println("c1 = " + c1); //打印出:[one, 1, {zhoufengbin,24}]
		
		//向集合中添加多个元素并打印
		Collection c2 = new ArrayList();
		c2.add("two");//常量池
		c2.add(2);   //自动装箱
		System.out.println("c2 = " + c2); // c2 = [two, 2]
		//将c2中的元素全部添加到c中,addAll方法是将c2中的元素一个一个的添加到c1中
		//c1.addAll(c2);
		//System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, two, 2]
		c1.add(c2); //这种是c2当做一个元素添加到c1中。
		System.out.println("c1 = " + c1); //c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
	}
}


// Person类
public class Person {
	
	private String name;
	private int age;
	
	public Person() {}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = 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;
	}

		@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@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;
	}

	@Override
	public String toString() {
		return "{" + getName() + "," + getAge() + "}";
	}
}

1.2 判断集合中是否包含指定的元素

判断元素是否的方法:

  • public boolean contains(Object o) 判断是否包含指定的一个元素或则能看成一个整体的元素。
  • public boolean containsAll(Collection<?> c) 判断是否包含指定的所有对象,一个一个的判断,都包含返回 true, 只有有一个不包含,就返回 false。
//判断集合中是否包含单个元素
		b = c1.contains("one");
		System.out.println(b); // true
		b = c1.contains("two");
		System.out.println(b); // false
		/*
		 * contains方法内部会调用Objects.equals(o, e)方法,其中 o 表示的是contains方法的形式参数,e 表示的是集合中的每个元素。
		 * 即:contains工作原理就是拿着参数对象的与集合中的已有的元素依次进行比较,比较时又调用Objects类中的equals方法:
		 * public static boolean equals(Object a, Object e){  // a 实际上是Person对象,e 是集合中的已有的元素
		 * 		return (a == b) || (a != null && a.equals(b)) //有两种比较方式
		 * } 
		 *  第一种:比较的是Person对象和集合中已有元素的对象的地址。
		 *  第二种:当Person不为空时,则调用Person类中的equals方法与集合中已有的元素进行比较
		 * 
		 */
		//当Person类中没有重写equals方法时,则调用Object类中继承下来的equals方法,比较的两个对象的地址   false
		//当Person类中重写了equals方法,则调用重写后的equals方法,比较的是两个对象的内容  true
		b = c1.contains(new Person("zhoufengbin",24));
		System.out.println(b); // false

	//判断集合c1中是否包含指定集合c3中所有元素
		Collection c3 = new ArrayList();
		c3.add(1);
		c3.add("one"); 
		System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
		System.out.println("c3 = " + c3); //c3 = [1, one]
		b = c1.containsAll(c3);
		System.out.println(b);  // true
		
		c3.add(2);
		System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
		System.out.println("c3 = " + c3); // c3 = [1, one, 2]
		//判断是否包含指定的所有对象,一个一个的判断,都包含返回 true, 只有有一个不包含,就返回 false
		b = c1.containsAll(c3);
		System.out.println(b); // false

1.3 求两个集合相同部分的元素(交集)

求交集的方法:

  • public boolean retainAll(Collection<?> c) 判断对象中的集合与 c 集合是否存在相同元素,将相同的元素添加到对象集合中,覆盖对象原有的集合,对象集合发生改变返回 true, 对象集合没有发生改变返回false, 也就是不存在交集。
//判断c1与c1的交集
		System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
		b = c1.retainAll(c1)
		System.out.println(b); // false
		System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
//判断c1与c3是否存在交集
		System.out.println("c1 = " + c1); // c1 = [one, 1, {zhoufengbin,24}, [two, 2]]
		System.out.println("c3 = " + c3); // c3 = [1, one, 2]
		
		b = c1.retainAll(c3);
		System.out.println(b); // true
		System.out.println("c1 = " + c1); // c1 = [one, 1]

1.4 删除集合中的元素

方法:
public boolean remove(Object o) 从集合中删除单个元素,或一个能看作一个整体的集合。删除成功集合发生改变就返回 true,否则 false。
public boolean removeAll(Collection<?> c) 从集合中删除指定的所有对象,逐个删除,不存在的就不删除。集合发生改变返回 true,否则 false。
原理解释:这两个方法,在删除元素时会与集合中已有元素进行比较,会调用Objects.equals方法。当被equals方法重写,则会调用重写后的方法。

1.5 其他方法

public int size() 返回集合中元素的个数
public boolean isEmpty() 判断集合是否为空
public boolean equals(Object o) 判断集合是否相等。只有集合中的每个元素都相等才为 true。当equals方法被重写后,先调用重写的方法。

1.6 集合转换为数组

方法:
public Object toArray(Collection<?> c) 将集合转换为数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值