zoukankan      html  css  js  c++  java
  • 集合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+")";
    	}
    }
    

      

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/chenzhiwei/p/9522704.html
Copyright © 2011-2022 走看看