集合框架——collection

 

1.Collection下面派生了两个常用的子接口:List:可重复集并且有序,Set:不可重复集。

 

c.size(); c.isEmpty(); c.clear();

 

package day08;

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

/**
 * 集合框架
 * java提供了一套用于维护一组元素的数据结构解决方案——集合
 * java.util.Collection
 * Collection是所有集合的顶级接口,规定了所有集合都应具备的功能。
 * 
 * Collection下面派生了两个常用的子接口:
 * List:可重复集并且有序
 * Set:不可重复集
 * 重复与否指的是元素是否可以重复,
 * 而重复的标准判断是依靠元素自身equals比较的结果。
 * 比较为true则认为两个元素是重复元素。set集合不允许出现重复元素。
 * @author soft01
 *
 */
public class CollectionDemo {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		/*
		 * boolean add(E e)
		 * 向当前集合中添加元素,成功添加会返回true
		 */
		c.add("one");
		c.add("two");
		c.add("three");
		c.add("four");
		System.out.println(c);
		
		/*
		 * int size()
		 * 返回当前集合的元素数量
		 */
		int size = c.size();
		System.out.println("size:"+size);
		
		/*
		 * 判断当前集合是否为空集(不含有元素)
		 */
		boolean isEmpty = c.isEmpty();
		System.out.println("isEmpty:"+isEmpty);
		
		/*
		 * void clear()
		 * 清空集合
		 */
		c.clear();
		System.out.println("集合已清空");
		
		System.out.println(c);//[]
		System.out.println("size:"+c.size());
		System.out.println("isEmpty:"+c.isEmpty());
	}
}


2.改其中一个点。

前面已经创建过的类。

 

 

 

 

package day02;
/**
 * Point 设计目的:表示直角坐标系上的一个点
 * 特征:x,y两个值
 * 
 * 使用这个类测试作为Object子类对相关方法的重写原则。
 * 
 * java中所有的类都继承自Object,
 * 当一个类没有使用extends显示继承任何一个类时,
 * 编译器在编译该类后默认会让其继承自Object.
 * @author soft01
 *
 */
public class Point {
	private int x;
	private int y;
	
	public Point() {
		
	}

	public Point(int x, int y) {
		super();
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}
	
	/**
	 * 当一个对象的toString被使用,那么就应当重写该方法。
	 * 因为Object提供的该方法返回的句柄对实际开发的价值不大。
	 * 重写toString方法的原则是返回的字符串中应当包含当前对象
	 * 需要让外界了解的属性信息。
	 * 格式没有要求,将来按照实际工作中的需求定。
	 * 
	 */
	public String toString() {
		return "("+x+","+y+")";
	}
	public boolean equals(Object obj) {
		if(obj == null) {
			return false;
		}
		if(obj == this) {
			return true;
		}
		if(obj instanceof Point) {
			Point p =(Point)obj;
			return this.x==p.x&&this.y==p.y;
		}
		return false;
	}
}

 

package day08;
import java.util.ArrayList;
import java.util.Collection;

import day02.Point;;
/**
 * 集合存放的元素的引用(地址)
 * @author soft01
 *
 */
public class CollectionDemo2 {
	public static void main(String[] args) {
		Point p = new Point(1,2);
		Collection c = new ArrayList();
		c.add(p);
		
		System.out.println("p:"+p);
		System.out.println("c:"+c);
		
		p.setX(2);
		System.out.println("p:"+p);
		System.out.println("c:"+c);//[(2,2)]
	}
}


3.判断当前集合是否包含给定元素c.contains(p)

 

 

 

 

package day08;
import java.util.ArrayList;
import java.util.Collection;
import day02.Point;
/**
 * boolean contains(E e)
 * 判断当前集合是否包含给定元素
 * @author soft01
 *
 */
public class Collection_contains {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(new Point(1,2));
		c.add(new Point(2,3));
		c.add(new Point(3,4));
		c.add(new Point(4,5));
		System.out.println(c);
		
		Point p = new Point(1,2);
		/*
		 * 判断集合c是否包含p对象
		 * 集合contains方法判断包含的逻辑为:
		 * 当前集合元素只要有与给定对象equals比较为true的,
		 * 则认为当前集合包含还元素
		 * 
		 * 作为集合的元素,它的toString,equals方法会影响集合很多方法的结果。
		 * 所以若集合存放的是我们自己写的类,那么就要妥善重写这两个方法。
		 */
		boolean contains = c.contains(p);
		System.out.println("是否包含:"+contains);
	}
}


4.删除集合元素c.remove(p)

 

 

 

 

package day08;

import java.util.ArrayList;
import java.util.Collection;
import day02.Point;
/**
 * 删除集合元素
 * @author soft01
 *
 */
public class Collection_remove {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(new Point(1,2));
		c.add(new Point(3,4));
		c.add(new Point(5,6));
		c.add(new Point(3,4));
		System.out.println(c);
		
		Point p = new Point(3,4);
		/*
		 * boolean remove(E e)
		 * 从集合中删除给定元素,删除成功则返回true
		 * 
		 * 删除逻辑为:集合会顺序用给定元素与集合元素
		 * 进行equals比较,删除第一个比较为true的元素。
		 */
		c.remove(p);
		System.out.println(c);
	}
}


5.集合操作:c1.addAll(c2); c1.containsAll(c3); c1.removeAll(c3);

 

 

 

 

package day08;

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

/**
 * 集合操作
 * @author soft01
 *
 */
public class Collection_addAll {
	public static void main(String[] args) {
		Collection c1 = new ArrayList();
		c1.add("java");
		c1.add("c++");
		c1.add(".net");
		System.out.println(c1);
		
		Collection c2 = new HashSet();
		c2.add("android");
		c2.add("ios");
		c2.add("java");
		System.out.println(c2);
		
		/*
		 * 将c2集合中的所有元素存入c1
		 * boolean addAll(Collection c)
		 * 将给定集合的所有元素添加到当前集合中
		 * 添加后当前集合元素发生改变则返回true
		 */
		c1.addAll(c2);
		System.out.println(c1);
		System.out.println(c2);
		
		Collection c3 = new ArrayList();
		c3.add("java");
		c3.add("ios");
		System.out.println("c3:"+c3);
		/*
		 * boolean containsAll(Collection c)
		 * 判断当前集合是否包含给定集合中的所有元素
		 */
		boolean contains = c1.containsAll(c3);
		System.out.println("c1包含c3所有元素:"+contains);
		
		/*
		 * boolean removeAll(Collection c)
		 * 删除当前集合中与给定集合中的公有元素删交集
		 */
		c1.removeAll(c3);
		System.out.println(c1);
	}
}


6.集合的遍历——迭代器(Iterator)

 

 

 

 

package day08;

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

/**
 * 集合的遍历
 * Collection提供了统一的遍历集合元素的方式:
 * 迭代器模式(Iterator)
 * 对应办法:
 * Iterator iterator()
 * 该方法会返回一个可以遍历当前集合元素的迭代器实例。
 * 
 * java.util.Iterator接口
 * 该接口规定了迭代器用来遍历集合的相关方法。
 * 不同的集合都实现了一个可以用于遍历自身的迭代器实现类。
 * 我们无需记住每种集合提供的迭代器实现类的名字,
 * 只要将它们以Iterator接口看待,
 * 可以调用相关遍历方法达到遍历集合的目的就可以了。
 * 
 * 迭代器遍历集合遵循步骤:
 * 问,取,删(其中删除不是必须操作)
 * @author soft01
 *
 */
public class Collection_iterator {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add("one");
		c.add("#");
		c.add("two");
		c.add("#");
		c.add("three");
		c.add("#");
		c.add("four");
		System.out.println(c);
		
		Iterator it = c.iterator();
		/*
		 * boolean hasNext()
		 * 通过迭代器判断集合是否还有元素可以遍历
		 */
		while(it.hasNext()) {
			/*
			 * E next()
			 * 获取集合中下一个元素
			 */
			String str = (String)it.next();
			System.out.println(str);
			if("#".equals(str)) {
				/*
				 * 在使用迭代器遍历集合的过程中
				 * 不能通过集合的方法增删元素,
				 * 否则会发生迭代器错误。
				 * 
				 * 迭代器的remove方法可以将通过
				 * next方法取出的元素从集合中删除
				 */
				it.remove();
			}
		}
		System.out.println(c);
	}
}


7. 泛型 JDK1.5后推出的一个新特性,泛型可以不指定,若不指定则为原型Object。
<E>——泛型参数

 

 

 

 

package day08;
/**
 * 泛型 JDK1.5后推出的一个新特性
 * 泛型又称为参数化类型,允许使用方在实例化对象时
 * 传入具体类型来决定当前类中泛型的实际类型。
 * @author soft01
 *
 */
public class Point<E> {
	private E x;
	private E y;
	
	public Point() {
		
	}

	public Point(E x, E y) {
		super();
		this.x = x;
		this.y = y;
	}

	public E getX() {
		return x;
	}

	public void setX(E x) {
		this.x = x;
	}

	public E getY() {
		return y;
	}

	public void setY(E y) {
		this.y = y;
	}
	
	/**
	 * 当一个对象的toString被使用,那么就应当重写该方法。
	 * 因为Object提供的该方法返回的句柄对实际开发的价值不大。
	 * 重写toString方法的原则是返回的字符串中应当包含当前对象
	 * 需要让外界了解的属性信息。
	 * 格式没有要求,将来按照实际工作中的需求定。
	 * 
	 */
	public String toString() {
		return "("+x+","+y+")";
	}
	public boolean equals(Object obj) {
		if(obj == null) {
			return false;
		}
		if(obj == this) {
			return true;
		}
		if(obj instanceof Point) {
			Point p =(Point)obj;
			return this.x==p.x&&this.y==p.y;
		}
		return false;
	}
}

 

package day08;

public class TestPoint {
	public static void main(String[] args) {
		Point<Integer> p1 = new Point<Integer>(1,2);
		System.out.println("p1:"+p1);
		p1.setX(2);
		System.out.println("p1:"+p1);
		int x1 = p1.getX();
		System.out.println("x1:"+x1);
		
		Point<Double> p2 = new Point<Double>(1.1,2.2);
		System.out.println("p2:"+p2);
		p2.setX(2.2);
		System.out.println("p2:"+p2);
		double x2 = p2.getX();
		System.out.println("x2:"+x2);
		
		Point<String> p3 = new Point<String>("一","二");
		System.out.println("p3:"+p3);
		p3.setX("二");
		System.out.println("p3:"+p3);
		String x3 = p3.getX();
		System.out.println("x3:"+x3);
	}
}


8.集合中广泛使用泛型,而泛型是用来约束集合中的元素类型。

 

 

 

 

package day08;

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

/**
 * 集合中广泛使用泛型,而泛型是用来约束集合中的元素类型。
 * @author soft01
 *
 */
public class CollectionDemo3 {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<String>();
		c.add("one");
		c.add("two");
		c.add("three");
		c.add("four");
		System.out.println(c);
		
		Iterator<String> it = c.iterator();
		while(it.hasNext()) {
			String str = it.next();
			System.out.println(str);
		}
	}
}


9.JDK1.5之后推出的又一个新特性:增强for循环,又称为新循环,for each

用于数组:

 

 

 

 

package day08;
/**
 * JDK1.5之后推出的又一个新特性:
 * 增强for循环,又称为新循环,for each
 * 
 * 新循环并非新的语法,它不是JVM认可的,而是编译器认可的。
 * 作用是方便遍历集合或数组。
 * @author soft01
 *
 */
public class NewForDemo1 {
	public static void main(String[] args) {
		String[] array = {"one","two","three","four"};
	
		for(int i=0;i<array.length;i++) {
			String str = array[i];
			System.out.println(str);
		}
		
		for(String str:array) {
			System.out.println(str);
		}
	}
}


用于集合:

 

 

 

 

package day08;

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

/**
 * 使用新循环遍历集合
 * @author soft01
 *
 */
public class NewForDemo2 {
	public static void main(String[] args) {
		Collection<String> c = new ArrayList<String>();
		c.add("one");
		c.add("two");
		c.add("three");
		c.add("four");
		/*
		 * 编译器在编译源程序时会将新循环遍历集合
		 * 改为使用迭代器遍历方式。
		 * 所以新循环在遍历集合时不能通过集合方法增删元素。
		 */
		for(String str : c) {
			System.out.println(str);
		}
		System.out.println(c);
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

linsa_pursuer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值