集合Conllection
一、Collection
java.util.Collection
* -集合用于存放一组元素,提供了维护集合的相关方法
* -其派生了两个接口
* List:可重复
* Set:不可重复
* -元素是否重复依靠元素自身equals方法比较的结果
Point类(测试类):
package daay01;
public class Point {
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
private int x;
private int 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;
}
@Override
public String toString() {
return " [" + x + ", " + y + "]";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
}
1.常用方法操作
package daay01;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collection;
/**
* java.util.Collection
* -集合用于存放一组元素,提供了维护集合的相关方法
* -其派生了两个接口
* List:可重复
* Set:不可重复
* -元素是否重复依靠元素自身equals方法比较的结果
*
* @author ajia
*
*/
public class CollectionDemo01 {
public static void main(String[] args) {
Collection c=new ArrayList();
/*
* nooleam add (E e)
* -向指定的结合中添加元素
* -添加成功返回true
*/
c.add("one");
c.add("two");
c.add("three");
System.out.println(c);
/*
* int size()
* -返回当前集合中的元素个数
*/
System.out.println(c.size());
/*
* boolean isEmpty()
* 判断一个集合是否为空集
*/
boolean isEmpty=c.isEmpty();
System.out.println("是否为空:"+isEmpty);
/*
* void clear()
* -清空集合
*/
c.clear();
System.out.println("是否为空:"+c.isEmpty());
}
}
package daay01;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collection;
/**
* java.util.Collection
* -集合用于存放一组元素,提供了维护集合的相关方法
* -其派生了两个接口
* List:可重复
* Set:不可重复
* -元素是否重复依靠元素自身equals方法比较的结果
*
* @author ajia
*
*/
public class CollectionDemo01 {
public static void main(String[] args) {
Collection c=new ArrayList();
/*
* nooleam add (E e)
* -向指定的结合中添加元素
* -添加成功返回true
*/
c.add("one");
c.add("two");
c.add("three");
System.out.println(c);
/*
* int size()
* -返回当前集合中的元素个数
*/
System.out.println(c.size());
/*
* boolean isEmpty()
* 判断一个集合是否为空集
*/
boolean isEmpty=c.isEmpty();
System.out.println("是否为空:"+isEmpty);
/*
* void clear()
* -清空集合
*/
c.clear();
System.out.println("是否为空:"+c.isEmpty());
}
}
package daay01;
import java.util.ArrayList;
import java.util.Collection;
/**
* 删除集合中的元素
* @author ajia
*
*/
public class CollectionDemo04 {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add(new Point(1,5));
c.add(new Point(1,5));
c.add(new Point(3,72));
c.add(new Point(6,82));
System.out.println(c);
//[ [1, 5], [1, 5], [3, 72], [6, 82]]
Point p=new Point(1,5);
System.out.println(p);
/*
* boolean remove(E e)
* -从集合中删除指定元素,删除成功返回true
* -只删除集合中第一个与给定equals比较为true的元素
*/
c.remove(p);
System.out.println(c);
//[ [1, 5], [3, 72], [6, 82]]
}
}
package daay01;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
/**
* 集合的批量操作
* @author ajia
*
*/
public class CollectionDemo05 {
public static void main(String[] args) {
Collection c1=new ArrayList();
c1.add("java");
c1.add("c++");
c1.add(".net");
c1.add("ios");
Collection c2=new HashSet();
//不可添加重复元素,并且以自己的方式顺序放入
c2.add("ios");
c2.add("android");
c2.add("windowMobie");
System.out.println(c2.add("ios"));
System.out.println(c2);//[android, ios, windowMobie]
/*
* 取并集
* boolean addAll(Collection c)
* -将给定集合中所有的元素添加到当前集合中
* 只要当前集合中的元素个数发生变化就返回true
*
*
*/
//谁调用addAll并集就是谁的特点
c1.addAll(c2);
System.out.println(c1);
//[java, c++, .net, ios, android, ios, windowMobie]
c2.addAll(c1);
System.out.println(c2);
//[java, c++, .net, ios, android, ios, windowMobie]
Collection c3=new ArrayList();
c3.add("ios");
c3.add("c++");
c3.add(".net");
/*
* boolean containsAll(Coleaction c)
* - 判断当前集合中是否包含给定集合中的所有元素
*/
boolean isContainsAll=c1.containsAll(c3);
System.out.println("c1中是否包含c3中的所有元素:"+isContainsAll);
//true
/*
* 删除两个集合中共有的元素
*/
c1.removeAll(c3);
System.out.println(c1);
//[java, android, windowMobie]
}
}
2.迭代器
package daay01;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/**
* 集合的遍历
* -Collection提供了一个遍历集合的方法:迭代器模式
*
* Iterator iterator()
*
* -java.util.Interator是一个接口,规定了用于遍历集合的方法,
* 对于不同的集合提供了不同的实现类,不需要记住具体的实现类,把他们当做Interator
*
* 便立即和遵循:问 取 删 步骤
* @author ajia
*
*/
public class CollectionDemo06 {
public static void main(String[] args) {
Collection <String>c=new ArrayList<String>();
c.add("one");
c.add("#");
c.add("two");
c.add("#");
c.add("three");
c.add("#");
c.add("four");
//获取当前集合的迭代器
Iterator it=c.iterator();
/*
*boolean hasNext() ---问 判断集合是否含有元素
*
*/
while(it.hasNext()){ //问
Object obj=it.next(); //取
String str=(String)obj;
System.out.print(str+",");
if("#".equals(str)){
/*
* 在使用迭代器遍历集合的时候,不能使用集合中的添加和删除的方法
* c.remove(str);
*抛异常:java.util.ConcurrentModificationException
*/
//但是可以使用迭代器中的方法增删元素 //删
it.remove();
}
}
System.out.println(c);
}
}
增强for循环foreach
不能代替传统的循环,仅仅用来遍历集合或数组
-新循环并非新的语法,新循环是编译器认可,虚拟机不认可的
* -新循环遍历集合时,编译器会将它改为迭代器的方式遍历,所以在使用
* 新循环遍历时不能使用集合的增加或者删除的方法。只能用来遍历集合或者
* 数组,不能用来增加或者修改
package daay01;
import java.util.ArrayList;
import java.util.Collection;
public class NewForDemo02 {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("#");
c.add("two");
c.add("three");
c.add("four");
c.add("#");
c.add("six");
c.add("#");
c.add("one");
/*
* -新循环并非新的语法,新循环是编译器认可,虚拟机不认可的
* -新循环遍历集合时,编译器会将它改为迭代器的方式遍历,所以在使用
* 新循环遍历时不能使用集合的增加或者删除的方法。只能用来遍历集合或者
* 数组,不能用来增加或者修改
*/
for(Object e:c){
String str=(String)e;
System.out.println(str);
}
}
}
关于List集合比较器的重写:
大致步骤:1.实现Comparator接口
2.重写该接口中 的compare方法,写入自定义的排序方式
package day04;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) {
//创建排序的集合
List <Point> list=new ArrayList<Point>();
list.add(new Point(20,20));
list.add(new Point(25,24));
list.add(new Point(24,57));
list.add(new Point(35,24));
list.add(new Point(99,74));
//利用工具类Collections里面的sort方法对list集合排序
Collections.sort(list,
/*
* 因为此比较器只用一次,故采用匿名内部类的形式
* 传参,Comparator为接口,否则的话需实现该接口.
* 该接口中需重写compare方法,在该方法中自定义比较
* 方法.
*/
new Comparator<Point>() {
public int compare(Point o1, Point o2) {
if(o1==null){
return -1;
}
if(o2==null){
return -1;
}
int len=o1.x*o1.x+o1.y*o1.y;
int olen=o2.x*o2.x+o2.y*o2.y;
if(len>olen) {
return -1;
}else {
return 1;
}
}
}
);
System.out.println(list);
//运行结果[(99,74), (24,57), (35,24), (25,24), (20,20)]
}
}
/**
* 用在于List集合中存放的元素
* @param x
* @param y
*/
class Point{
public Point(int x,int y) {
this.x=x;
this.y=y;
}
int x;
int y;
public String toString() {
return "("+this.x+","+this.y+")";
}
}
浙公网安备 33010602011771号