`
wlh269
  • 浏览: 455834 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

容器类

    博客分类:
  • J2SE
阅读更多
package com.wlh.collection;

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

public class TestList {

	public static void main(String[] args) {

		Collection c = new ArrayList();
		//可以放入不同类型的对象
		c.add("hello");
		c.add(new Name("f1", "l1"));
		c.add(new Name("f1", "l1"));
		c.add(11);//整型11将自动打包为对象new Integer(11);
		c.add(22);//整型12将自动打包为对象new Integer(11);
		
		//返回包含此 collection 中所有元素的数组
		Object [] obj=c.toArray();
		for(int i=0;i<obj.length;i++){
			System.out.println("obj"+i+":"+obj[i]);
		}
		
		
		Collection cc = new ArrayList();
		cc.add("hello");
		cc.add(11);
		cc.add("hello world");
		
		//contains方法:如果此 collection 包含指定的元素,则返回 true
		System.out.println(c.contains("hello"));//true
		
		//containsAll: 如果此collection 包含指定 collection 中的所有元素,则返回 true。
		System.out.println(c.containsAll(cc));//false
		
		//addAll: 将指定 collection 中的所有元素都添加到此 collection 中
		System.out.println(c.addAll(cc));
		
		
		
		//retainAll:交集,仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 
		//System.out.println(c.retainAll(cc));
		
		//removeAll:  移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
		System.out.println(c.removeAll(cc));
		
		
		
		//ArrayList为什么有两个remove方法?
		//remove(int index) 是子类新添加的!
		//如果是父类引用指向子类对象,则找不到子类中新添加的方法。
		//要想调用子类新添加的方法,需要先转型
		//是优先自动打包呢?还是先去匹配方法?
		 c.remove("hello1");
		 System.out.print(c);
		 
		//要想调用子接口中新添加的方法,需要先转型
		 List a = (List) c;
		 a.remove(1);
		
		System.out.println(c.size());
		System.out.println(c);
		
		//clear:移除此 collection 中的所有元素(父接口Collection中的方法clear)
		c.clear();
		System.out.println(c);
	}

}

class Name {
	private String firstName, lastName;

	public Name(String firstName, String lastName) {
		this.firstName = firstName;
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public String getLastName() {
		return lastName;
	}

	//重写了tostring方法
	public String toString() {
		return firstName + "" + lastName;
	}
}



package com.wlh.collection;

//为什么调用两次c.add("hello");只加入一个hello?
//可见HashSet中是采用了比较元素hashCode的方法来判断元素是否相同(duplicate),
//而不是采用其他类似equals之类的东东来判断。

//一个对象被当作Map里面的key的时候,hashCode用来比较两个东东是不是相等
//hashCode非常适合用来做索引
//重写equals方法,通常需要重写hashCode方法.因为你的本意是想让他相等的.但hashCode如果不重写,不同的对象就不会相等
import java.util.*;

public class BasicContainer {
	
 public static void main( String[] args) {
    Collection c = new HashSet();
    c.add("hello");
    c.add("hello");
    c.add(new Name3("f1","l1"));
    c.add(new Name3("f1","l1"));
    
    System.out.println(new String("f1").hashCode()==new String("f1").hashCode());
    
    c.add(new Integer(100));
    c.remove("hello"); 
    c.remove(new Integer(100));
    System.out.println(c.remove(new Name3("f1","l1")));
    //System.out.println(c);
    System.out.println(new Name3("f1","l1").hashCode());
    System.out.println(new Name3("f1","l1").hashCode());
    System.out.println(c);

			List list = new ArrayList();
			list.add(new Name3("f2", "l2"));
			list.add(new Name3("f1", "l1"));
			list.add(new Name3("f5", "l5"));
			list.add(new Name3("f3", "l3"));
			Collections.sort(list);
			System.out.println(list);
}


}

class Name3 implements Comparable 
{

public String firstName,lastName;

public Name3(String firstName, String lastName) {
	this.firstName = firstName; 
	this.lastName = lastName;
}

public String getFirstName() {
	return firstName;
}
public String getLastName() {
	return lastName;
}

@Override
public String toString() {
	return firstName + " " + lastName;
}


@Override
public boolean equals(Object obj) {
    if (obj instanceof Name) {
        Name3 name = (Name3) obj;
        return (firstName.equals(name.firstName))
            && (lastName.equals(name.lastName));
    }
    return super.equals(obj);
}


@Override
public int hashCode() {
	System.out.println(firstName.hashCode());
   return firstName.hashCode();//这个对象当作为索引的时候会使用
}


public int compareTo(Object o) {
    Name3 n = (Name3)o;
    int lastCmp = 
        lastName.compareTo(n.lastName);
    return 
         (lastCmp!=0 ? lastCmp :
          firstName.compareTo(n.firstName));
}

	
}




package com.wlh.collection;

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

public class TestSet {

	/**
	 * Set通过验证hashcode来判断2元素是否相等,先调用hashcode方法然后调用equals方法
	 */
	public static void main(String[] args) {
			    Collection c = new HashSet();
			    c.add("hello");
			    c.add("hello");
			    c.add(new Name4("f1","l1"));
			    c.add(new Name4("f1","l1"));
			    System.out.println(c);
	}
	
	
	
	
}
class Name4 //implements Comparable 
{

public String firstName,lastName;

public Name4(String firstName, String lastName) {
	this.firstName = firstName; 
	this.lastName = lastName;
}

public String getFirstName() {
	return firstName;
}
public String getLastName() {
	return lastName;
}

@Override
public String toString() {
	return firstName + " " + lastName;
}


@Override
public boolean equals(Object obj) {
    if (obj instanceof Name4) {
    	Name4 name = (Name4) obj;
    	System.out.println(firstName.equals(name.firstName));
        return (firstName.equals(name.firstName));
    }
    return super.equals(obj);
}


@Override
public int hashCode() {
	System.out.println(firstName.hashCode());
   return firstName.hashCode();//这个对象当作为索引的时候会使用
}


/*public int compareTo(Object o) {
	Name4 n = (Name4)o;
    int lastCmp = 
        lastName.compareTo(n.lastName);
    return 
         (lastCmp!=0 ? lastCmp :
          firstName.compareTo(n.firstName));
}*/

	
}



package com.wlh.collection;

import java.util.HashSet;
import java.util.Set;

public class SetTest5 { 
	  public static void main(String[] args){ 
	   Set set = new HashSet(); 
	   set.add(new SetElement5("aa")); 
	   set.add(new SetElement5("aa")); 
	   set.add(new SetElement5("bb")); 
	   System.out.println(set); 
	  } 
	  static class SetElement5{ 
	   String s; 
	   public SetElement5(String s){ 
	    this.s =  s; 
	   } 
	   public String toString(){ 
	    return s; 
	   } 
	   public boolean equals(Object obj) { 
		   System.out.println(s.equals(((SetElement5)obj).s));
	    return s.equals(((SetElement5)obj).s); 
	   } 
	   public int hashCode() { 
		   System.out.println(s.hashCode());
	    return s.hashCode(); 
	   } 
	  } 
	} 





package com.wlh.collection;

import java.util.Set; 
import java.util.*; 

/**
 * TreeSet中是采用Comparable接口中的compareTo方法来判断元素是否相同(duplicate),
 * 而不是采用其他类似equals之类的东东来判断。 
 * @author Administrator
 *
 */
public class TreeSetTest { 
	  public static void main(String[] args){ 
	   Set set = new TreeSet(); 
	   set.add(new SetElement2("aa")); 
	   set.add(new SetElement2("aa")); 
	   set.add(new SetElement2("bb")); 
	   System.out.println(set); 
	  } 
	  static class SetElement2 implements Comparable{ 
	   String s; 
	   public SetElement2(String s){ 
	    this.s =  s; 
	   } 
	   public String toString(){ 
	    return s; 
	   } 
	   public int compareTo(Object o){ 
	    return s.compareTo(((SetElement2)o).s); 
	   } 
	   public boolean equals(Object obj) { 
	    return s.equals(((SetElement2)obj).s); 
	   } 
	  } 
	} 


package com.wlh.collection;
import java.util.*;
class TestMap2 {
  public static void main(String args[]) {
    Map m1 = new HashMap(); 
    m1.put("one",new Integer(1));
    m1.put("one",new Integer(7));
    m1.put("two",new Integer(2));
    m1.put("three",new Integer(3));
    
    m1.put(new Name2("f1","l1"),"aaa");
    m1.put(new Name2("f1","l1"),"bbb");
    m1.put(new Name2("f1","l1"),"bbb");
    
    
    //m1.remove(new Name("f1","l1"));
    //System.out.println(m1);
    //System.out.println(m1.size());
    //System.out.println(m1.containsKey("one"));
    

    if(m1.containsKey("two")) {
      int i = ((Integer)m1.get("two")).intValue();
      //System.out.println(i);
    }

    Map m2 = new TreeMap();
	//m2.put("B","aaa");
	m2.put(new Name2("f1","l1"),"aaa");
	m2.put(new Name2("f1","l1"),"aaa");
    System.out.println(m2);
    //System.out.println(m2.containsValue("aaa"));
        
    
    
    Map m3 = new HashMap(m1);
    m3.putAll(m2);
    System.out.println(m3);
  }
}


class Name2 
implements Comparable 
{
	
	public String firstName,lastName;
    
	public Name2(String firstName, String lastName) {
		this.firstName = firstName; 
		this.lastName = lastName;
	}
    
	public String getFirstName() {
		return firstName;
	}
	public String getLastName() {
		return lastName;
	}

	@Override
    public String toString() {
		return firstName + " " + lastName;
	}
	
	
    @Override
    public boolean equals(Object obj) {
		System.out.println("equals.....");
	    if (obj instanceof Name) {
	        Name2 name = (Name2) obj;
	        return (firstName.equals(name.firstName))
	            && (lastName.equals(name.lastName));
	    }
	    return super.equals(obj);
	}
	
	
	@Override
	public int hashCode() {
		//System.out.println("==="+firstName.hashCode());
		System.out.println("hashCode.....");
	   return firstName.hashCode();//这个对象当作为索引的时候会使用
	}
	

	public int compareTo(Object o) {
		System.out.println("compareTo.....");
        Name2 n = (Name2)o;
        int lastCmp = lastName.compareTo(n.lastName);
        return 
             (lastCmp!=0 ? lastCmp : firstName.compareTo(n.firstName));
		
    }
	
		
}
分享到:
评论

相关推荐

    压力容器类设备预算、报价小软件.rar

    《压力容器类设备预算与报价软件详解》 在工业领域,压力容器类设备的预算与报价是一项关键工作,涉及到工程项目的成本控制、盈利预测以及竞标策略。为提高工作效率和准确性,专门的压力容器类设备预算、报价小软件...

    容器类实现的电话本

    实现电话号码本的管理和查询功能。号码本内预先存储了若干条联系人记录,记录内容包括联系人姓名和电话号码。...必须使用容器类作为内部数据结构,可自行选择合适的容器类; 必须把联系人记录定义成一个类;

    java容器类 是初学者很好的学习材料

    Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...

    Qt的容器类

    Qt 容器类详解 Qt 容器类是 Qt 框架中的一种基本数据结构,用于存储和管理数据。 Qt 容器类可以分为连续容器和链表两大类别。连续容器类包括 QVector、QList,链表类包括 QLinkedList。 QVector&lt;T&gt; 是一种与数组...

    JavaSE8容器类的UML图(继承自Colletion的所有子类)

    参考JavaSE8,全面囊括了所有Java容器类,以Collection为基类,使用不同颜色不同的继承体系分支进行标识。

    JAVA 容器类应用

    Java容器类是Java集合框架的重要组成部分,它们提供了一种存储、管理和操作对象的方式。在Java中,容器类包括数组、列表、队列、集、映射等数据结构,它们为开发者提供了灵活的数据处理能力。本篇文章将深入探讨Java...

    java容器类研究与分析

    Java容器类,也称为集合类,是Java编程中用于存储和管理对象的重要工具。它们提供了比数组更加灵活和强大的功能,适用于各种复杂的数据结构需求。本文主要探讨Java容器类的基本概念、特点以及不同类型的容器。 首先...

    Java 容器类的解析及对比

    ### Java 容器类解析及对比 #### 一、概述 在Java开发中,容器类是程序员必须掌握的基础知识之一。本文将详细解析并对比Java中的各种容器类,特别是`Collection`、`List`、`ArrayList`、`Vector`以及`Map`、`...

    容器类的举例

    在编程领域,容器类是数据结构的一个重要组成部分,它们用于存储和管理一组对象。容器类在C++标准库中有着广泛的应用,如`std::vector`、`std::list`、`std::set`和`std::map`等。本节我们将通过实例深入探讨容器类...

    Java容器类的深入理解

    Java容器类是Java编程中非常重要的一部分,它们为数据存储提供了丰富的结构和操作。本文主要关注的是Java中的两种主要容器类型:Collection和Map,以及它们的一些具体实现,如List接口下的ArrayList、LinkedList和...

    c++容器类&QT;容器

    ### C++ 容器类与 Qt 容器详解 #### C++ 容器类概述 在C++标准库中,容器类(containers)是用于存储数据的重要组件之一,它们为程序设计提供了高度灵活且功能丰富的数据管理手段。根据数据的组织形式不同,C++中...

    第6章容器类简介共21页.pdf.zip

    在Java编程语言中,容器类是集合框架的重要组成部分,它们为组织、管理和操作对象提供了强大的工具。本章将深入探讨Java中的容器类,包括ArrayList、LinkedList、HashSet、HashMap等,以及它们在实际开发中的应用。 ...

    C++编程思想/模板和容器类

    【C++编程思想/模板和容器类】 C++中的模板是一种强大的工具,它允许程序员创建泛型代码,即代码能够处理多种数据类型。模板的概念在C++中扮演着至关重要的角色,尤其是对于实现容器类,如向量、列表、集合等。容器...

    Java容器类的教学实践与思考.pdf

    Java容器类是Java编程中的核心概念,主要用于存储和管理对象。在Java程序设计课程中,容器类的教学至关重要,因为它们提供了动态数据结构,使得开发者能够高效地组织和操作数据。然而,由于容器类的深入理解需要数据...

    MFC容器类[参考].pdf

    本篇文章将深入探讨MFC中的基本容器类,包括其特性、分类、使用方法以及指针类型的容器类。 首先,MFC提供了三种基本的容器类:arrays(数组)、lists(链表)和maps(映射,也称为字典)。这些容器类允许开发者...

    容器的分类

    本篇文章将详细讲解容器的分类,重点探讨Java中的集合框架,包括List、Set以及重写toString方法的重要性,同时也会简单提及Collections类的使用。 首先,我们来了解容器的分类。在Java中,容器主要分为两大类:集合...

    Java容器类List、ArrayList、Vector及map、HashTable应用

    Java容器类List、ArrayList、Vector及map、HashTable应用 List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的...

    Java容器类学习心得.pdf

    Java容器类是Java集合框架的重要组成部分,它为处理对象集合提供了数据结构和算法的支持。本篇文章将重点介绍Java容器类中Collection接口、Map接口、Iterator接口以及List、Set和Map的实现类。 首先,Collection...

Global site tag (gtag.js) - Google Analytics