java总结-集合-1

记性逐渐不好,有的东西忘记,本文复习备忘用,先从最基本的java基础集合开始,集合分为Collection接口和Map接口,这两个接口又衍生出了很多子接口,下面对着2个接口分别作介绍。

一,collection接口

直接实现Collection的类和继承他的接口下图



 可以看到有4个接口4个类,下面主要对AbstractCollection类和List,Queue,Set接口进行逐一研究

Collection接口中定义的方法如下图




 
 实现他的类和继承他的接口都这些方法,这些方法的具体功能就不多介绍,其中很多方法的实现都由AbstractCollection来完成,AbstractCollection的方法如下图

 



 

AbstractCollection类对Collection接口的方法进行了实现,并且重写了toString方法,方法前面有小A的表示抽象方法,这个就交给具体的继承类根据自己的特性自己实现,具体的方法有size方法和iterator()方法,size方法主要是实现队列接口Queue的类进行重写,如ArrayBlockingQueue的size方法如图




 
每个实现了
iterator方法的类都有自己的迭代器类来处理数据遍历如ArrayList类的迭代器类实现如下图:

 ArrayBlockingQueue类的实现方法如下:

 



 
 简单找出两个集合总相同的元素的方法

 

package basic.collection.basic;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Random;

/**
 * <p>Title: Test1.java</p>
 * <p>Description: 从一个集合中
 * <p>Copyright: Copyright (c) 2014</p>
 * @author 雪含心
 * @date 2015年1月9日
 */
public class Test1 {

	public static void main(String[] args) {
		
		Collection<String> c1 = new ArrayList<String>();
		System.out.println("遍历c1");
		for(int i = 0; i < 10; i ++){
			String ranStr = i + "|";
			System.out.print( ranStr);
			c1.add(ranStr);
		}
		System.out.println();

		System.out.println("遍历c2");
		Collection<String> c2 = new ArrayList<String>();
		for(int j = 1; j < 20; j ++){
			Random random = new Random();
			String ranStr = random.nextInt(j) + "|";
			System.out.print(ranStr);
 			c2.add(ranStr);
		}
		System.out.println();
		// 从c1中删除不包含c2的元素,即留住2个集合都有的元素,List会有重复
		c2.retainAll(c1);
		System.out.println("c2的大小 " + c2.size());
 		for(String s:c2){
			System.out.print(s);
		}
		System.out.println();
		System.out.println("遍历s1");

 		Collection<String> s1 = new HashSet<String>();
		for(int i = 0; i < 20; i ++){
			String ranStr = i + "|";
			System.out.print( ranStr);
			s1.add(ranStr);
		}
		System.out.println();
		System.out.println("遍历s2");

		Collection<String> s2 = new HashSet<String>();
		for(int j = 1; j < 20; j ++){
			Random random = new Random();
			String ranStr = random.nextInt(j) + "|";
			System.out.print(ranStr);
 			s2.add(ranStr);
		}
		 
		// 从s1中删除不包含s2的元素,即留住2个集合都有的元素,Set不重复

		s2.retainAll(s1);
		System.out.println();
		System.out.println("s2的大小 " + s2.size());
 		for(String s:s2){
			System.out.print(s);
		}
	}

}

 
 可以看到 这里面用到了AbstractCollection方法的retainAll如图

 



 效率实际是比较低下的

 假如我把上面的集合中存放的对字符串换成对象会出现情况呢,这个就牵扯到ArrayList的contains方法和HashSet的contains方法,HashSet使用的是HashMap的contains方法,具体的做法是找到传入对象的hash值

根据hash值找到对象,然后再比较对象的eques方法是否相等,ArrayList是直接用eques方法比较的

ArrayList


HashMap
 

 

 

  • 大小: 10.5 KB
  • 大小: 13.1 KB
  • 大小: 13.8 KB
  • 大小: 13.8 KB
  • 大小: 13.8 KB
  • 大小: 10.7 KB
  • 大小: 14.6 KB
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值