java总结-集合-1

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

一,collection接口

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


java总结-集合-1_第1张图片
 可以看到有4个接口4个类,下面主要对AbstractCollection类和List,Queue,Set接口进行逐一研究

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



java总结-集合-1_第2张图片
 
 实现他的类和继承他的接口都这些方法,这些方法的具体功能就不多介绍,其中很多方法的实现都由AbstractCollection来完成,AbstractCollection的方法如下图

 


java总结-集合-1_第3张图片
 

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


java总结-集合-1_第4张图片

HashMap
 
java总结-集合-1_第5张图片
 

 

你可能感兴趣的:(java)