当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

奇怪的HashSet 和变换后的TreeSet

发表于: 2012-03-02   作者:crab1   来源:转载   浏览:
摘要: HashSet ,作为Set集合的一个实现类,很多书中写到Set中不能存放重复的元素。事实上并非如此。看下面的一个简短的例子 import java.util.*; class AddObject { int hashCode; public AddObject(int hashCode) { this.hashCode = hashCode; } publi

HashSet ,作为Set集合的一个实现类,很多书中写到Set中不能存放重复的元素。事实上并非如此。看下面的一个简短的例子

import java.util.*;
class AddObject {
	int hashCode;

	public AddObject(int hashCode) {

		this.hashCode = hashCode;
	}

	public int hashCode() {
		return hashCode;
	}
}

public class TestHashSet {
	public static void main(String args[]) {
		// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,
		// 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)
		// 方法进行比较,如果结果返回为true,则不添加;否则,添加
		Set<AddObject> set = new HashSet<AddObject>();
		// 设置初始hashCode值
		AddObject ao = new AddObject(2);
		// 第一次添加
		set.add(ao);
		// 重新设置hashCode
		ao.hashCode = 3;
		// 再次添加
		set.add(ao);
		System.out.println(set.size());
		// 输出结果显然是2。但两次添加的对象显然是同一个对象,所以Set中不能存放重复的元素这一说法是不完善的

	}
}

 TreeSet:一个有序的Set(一般为升序)·,它是通过compareTo()这个函数来判断所添加的数据是否已经存在和排序

import java.util.*;

class A implements Comparable {
	public int compareTo(Object o) {
		// 返回值为0时,表示两个对象相等不可以添加;否则添加成功
		return 1;

	}

}

public class TestTreeSet {

	public static void main(String[] args) {

		TreeSet<A> ts = new TreeSet<A>();

		A a = new A();

		A b = new A();
		// 进行添加时,调用compareTo()方法进行比较。一来判断是否重复;二来,是为了排序
		ts.add(a);
		ts.add(b);

		System.out.println(ts.size());

	}

}

 

奇怪的HashSet 和变换后的TreeSet

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号