向集合中存储自定义对象是,自定义对象的设计

自定义对象

  通过对List、Set、Map 集合的操作,发现集合的不同,自定义类的定义也有所差异

1、List集合中的自定义对象

  由于List底层判断集合是否相同依赖的是equals方法,所以在自定义类时要覆盖equals方法

  示例:

//自定义类Person
class Person{
	private String name;
	private int age;
	Person(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	public boolean  equals(Object obj){
		if( !(obj instanceof Person))
			return false;
		Person p = (Person) obj;
		return this.name.equals(p.name) && this.age == p.age;//通过姓名和年龄,判断是否为同一个对象
	}

	}

2.HashSet类时自定义类  

  由于HashSet底层数据结构式哈希表,所以,通过hadhcode值和equals方法来判断对象是否相同

示例:

class Student{
	private String name;
	private int age;
	Student(String name, int age){
		this.name = name;
		this.age = age;
	}
	public int hashCode(){
		//System.out.println(this.name+"......hasCode");
		return name.hashCode()+ age*39;
	}
	public boolean equals(Object obj){
		if(!(obj instanceof Student))
			return false;
		Student stu = (Student)obj;
		//System.out.println(this.name + "equals"+ stu.name);
		return this.name.equals(stu.name) && this.age==stu.age;
	}

	public String toString(){
		return name+"......"+age;
	}
}

  

3.TreeSet类存储自定义类时

  由于TreeSet底层是二叉树数据结构,所以使用compareTo方法判断是否为同意对象;其有两种方式;

方式一:

  通过实现Compareable接口,覆盖compareTo方法;

示例:

class Studnet_2 implements Comparable<Object>{
	private String name;
	private int age;
	Studnet_2(String name, int age){
		this.name = name;
		this.age = age;
	}
	public String getName(){
		return name;
	}
	public int getAge(){
		return age;
	}
	//根据StreeSet底层数据结构,集合通过compareTo 方法实现元素一致性
	public int compareTo(Object obj){
		if(!(obj instanceof Studnet_2))
			throw new RuntimeException("这不是学生对象");
		Studnet_2 stu = (Studnet_2)obj;
		if(this.age > stu.age)
			return 1;
		if(this.age == stu.age)
			return this.name.compareTo(stu.name);
		return -1;
	}

}

 

方式二:

通过定义比较器实现;

示例:

  

class StrLenComparator implements Comparator//比较器
{
	public int compare(Object o1,Object o2)
	{
		String s1 = (String)o1;
		String s2 = (String)o2;

		if(s1.length()>s2.length())
			return 1;
		if(s1.length()==s2.length())
			return 0;
		int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));
		if(num==0)
			return s1.compareTo(s2);

		return num;
	}
}

  

总结:当需要将自定义类对象作为参数存入到集合中时,一定要考虑到集合底层的数据结构,以便规范自定义类;

    同时,在开发过程中,自定义类似最好覆盖原有的比较方法。

时间: 2024-12-24 15:08:00

向集合中存储自定义对象是,自定义对象的设计的相关文章

集合中存储自定义对象源代码

集合中存储自定义对象: package attention; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Main_7 { public static void main(String[] args) { Collection coll=new ArrayList(); coll.add(new Person("List1",21));

集合中存储的是对象么

body { font-family: 微软雅黑,"Microsoft YaHei", Georgia,Helvetica,Arial,sans-serif,宋体, PMingLiU,serif; font-size: 10.5pt; line-height: 1.5; } html, body { } h1 { font-size:1.5em; font-weight:bold; } h2 { font-size:1.4em; font-weight:bold; } h3 { fon

往集合中存储元素的注意事项

1.如果数组中的元素不是object,那么会将数组作为集合元素存储到集合中. 例:int[] arr = {1,2,3};  会将arr作为一个元素存入集合中,而不是1,2,3. 如果要将1,2,3存入集合,需要把int 换成Integer. 原文地址:https://www.cnblogs.com/olddriver123/p/8350759.html

去除List集合中的重复元素? 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型,自定义类型)?

 关键字: 如果没有Set集合,List集合是怎么去除重复元素的(字符串类型)?  *   *     思考: List就可以存储重复元素,那么需求中容器中的元素必须保证唯一性,该如何解决呢??  *      *   去除List集合中的重复元素?  * * 思路: * * 1.首先我需要另一个临时容器tempList,用来存放我认为应该保留的元素.(也就是不重复的元素) * 2.然后我们应该遍历原容器, 一个一个的取出元素, 放入tempList. * 当tempList里已经装有刚刚取出的

集合框架(去除ArrayList集合中的重复自定义对象元素案例)

学生类 package cn.itcast_04; public class Student { private String name; private int age; public Student() { super(); } public Student(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public v

java集合 collection-list-ArrayList 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。

import java.util.*; /* 将自定义对象作为元素存到ArrayList集合中,并去除重复元素. 比如:存人对象.同姓名同年龄,视为同一个人.为重复元素. 思路: 1,对人描述,将数据封装进人对象. 2,定义容器,将人存入. 3,取出. List集合判断元素是否相同,依据是元素的equals方法. */ class Person { private String name; private int age; Person(String name,int age) { this.n

黑马程序员——java——自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序

自定义一个比较器,对TreeSet 集合中的元素按指定方法来排序 import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; //自定义一个比较器 class Mycompare implements Comparator { @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method s

java 集合框架-ArrayList存储不重复的自定义对象

/* 在ArrayList中存储自定义对象 为了实现在ArrayList中存储不重复的对象,需要重写equals方法.remove()方法和contains()方法都会调用equals()方法. 在使用HashSet时,也要在对象类中重写两个方法即,hashCode()和equals()方法.因为HashSet会在底层调用这两个函数. 首先比较HashCode(对象引用或地址),如果相同,再用equals比较对象是否相同. */ import java.util.*; class Person

Linq to Sql:N层应用中的查询(上) : 返回自定义实体

原文:Linq to Sql:N层应用中的查询(上) : 返回自定义实体 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使用var来定义L2S查询,让IDE自动推断变量的具体类型(IQueryable<匿名类型>),并提供友好的智能提示:而且可以充分应用L2S的延迟加载特性,来进行动态查询.但如果我们希望将业务逻辑放在一个独立的层中(譬如封装在远程的WCF应用中),又希望在逻辑层应用Linq to sql,则情况就比