`
jiauwu
  • 浏览: 82980 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
阅读更多

Set 存储的值不重复.

package ds.collections.sets;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * set测试 
 * @author Hust
 * @Time 2011-11-9
 */
public class SetTest {
	
	public static void main(String[] args) {
		//testHashSet();
		//testHashSetObj();
		testTreeSet();
		
	}

	//treeSet   
	public static void testTreeSet(){
		Set<String> treeSetTest = Collections.synchronizedSortedSet(new TreeSet<String>());
		treeSetTest.add("123");
		treeSetTest.add("123");
		
		Iterator<String> it =treeSetTest.iterator();
        while(it.hasNext()){
             System.out.println(it.next());
        }//
        //123
        
        TreeSet<String> treeSetTest2 = new TreeSet<String>();
		treeSetTest2.add("def");
        treeSetTest2.add("abc");
		Iterator<String> it2 =treeSetTest2.iterator();
        while(it2.hasNext()){
              System.out.println(it2.next());
        }
		/** result is
		 abc
		 def
		 */
		
        //排序接口
        TreeSet<Po2> treeSetComp = new TreeSet<Po2>(new Compara());
        treeSetComp.add(new Po2(345,"1234565"));
        treeSetComp.add(new Po2(1,"a"));
        treeSetComp.add(new Po2(1,"ab"));
        treeSetComp.add(new Po2(1,"1"));
        treeSetComp.add(new Po2(1,"123"));
        treeSetComp.add(new Po2(1,"41255"));
        treeSetComp.add(new Po2(1,"132"));
        treeSetComp.add(new Po2(1,"一"));
        treeSetComp.add(new Po2(1,"二"));
		Iterator<Po2> itc =treeSetComp.iterator();
        while(itc.hasNext()){
              System.out.println(((Po2)itc.next()).toString());
        }
        /**
         	1,1
			1,a
			1,ab
			1,一
			1,二
			1,123
			1,132
			1,41255
			345,1234565

         */
	}
	
	//HashSet
	public static void testHashSet() {
		//方法不同步: Set set = Collections.synchronizedSet(new HashSet());来实现同步
		Set<String> set = new HashSet<String>();
		System.out.println(set.isEmpty());
		set.add("123");
		set.add(new String("123")); //String 的hashCode使用比的是值*31 ...
		set.add("456");
		set.add("789");
		
		set.add("123"); // 重复的abc,set会自动将其去掉
		//set还是利用equals()方法进行比较
		System.out.println(set.contains("123"));
		System.out.println(set.remove("456"));
		System.out.println(set.contains("456"));
		
		System.out.println("size=" + set.size());
		List<String> list = new ArrayList<String>();
		list.add("zxc");
		list.add("asd");
		list.add("456");
		set.addAll(list); // 将list中的值加入set,并去掉重复的abc
		System.out.println("size=" + set.size());
		for (Iterator<String> it = set.iterator(); it.hasNext();) {
			System.out.println("value=" + it.next().toString());
		}
	}

	//测试存放对象
	public static void testHashSetObj(){
		Set<Po> poSet = Collections.synchronizedSet(new HashSet<Po>());
		Po p1 = new Po(1,"123");
		Po p2 = new Po(1,"123");
		poSet.add(p1);
		poSet.add(p2);
		System.out.println(poSet.size());
		for (Iterator<Po> iterator = poSet.iterator(); iterator.hasNext();) {
			Po po = iterator.next();
			System.out.println(po.toString());
		}
		/**
		 1,123
		 1,123 
		 */
		poSet.clear();
		System.out.println(poSet.size());
		Set<Po2> po2Set = Collections.synchronizedSet(new HashSet<Po2>());
		Po2 p21 = new Po2(1,"123");
		Po2 p22 = new Po2(1,"123");
		po2Set.add(p21);
		po2Set.add(p22);
		for (Iterator<Po2> iterator = po2Set.iterator(); iterator.hasNext();) {
			Po2 po2 = iterator.next();
			System.out.println(po2.hashCode() + po2.toString());
		}
		/**
		 不重写hashCode 与 equals时
		 15580811,123
		 15580811,123
		 重写后
		 15580811,123
		 */
	}

}
/**
 * 测试类
 * @author Hust
 * @Time 2011-11-9
 */
class Po {
	private int id;
	private String name;
	
	public Po(int id,String name){
		this.id = id;
		this.name = name;
	}
	
	public String toString(){
		return id+","+name;
	}
}

/**
 * 测试类
 * @author Hust
 * @Time 2011-11-9
 */
class Po2 {
	private int id;
	private String name;
	
	public Po2(int id,String name){
		this.id = id;
		this.name = name;
	}
	
	//重写hashCode
	public int hashCode() {
		int hash = 0;
		hash += (this.name!=null)?this.name.hashCode():0;
		hash += 31*hash + this.id;
		return hash;
	} 
	
	//重写equals
	public boolean equals(Object o ){
		if(o == null) return false;
		if(o.getClass() != this.getClass()) return false;
		Po2 po = (Po2)o;
		if(this.id != po.id || !this.name.equals(po.name))
			return false;
		return true;
	}
	
	public String toString(){
		return id+","+name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
}

class Compara implements Comparator<Po2>{

	@Override
	public int compare(Po2 o1, Po2 o2) {
		if(o1.equals(o2))
			return 0;
		else if(o1.getId() >o2.getId()) 
			return 1;
		else if(o1.getName().hashCode() > o2.getName().hashCode())
			return 1;
		return -1;
	}

}
 

 


分享到:
评论
1 楼 yys2020 2012-05-17  
受教了

相关推荐

    java set 去重

    java set 去重

    10.javaSet 接口及其实现类.zip

    10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类.zip10.javaSet 接口及其实现类....

    Java Set集合的遍历及实现类的比较

    Java Set集合是Java集合框架的重要组成部分,它存储不重复的元素。Set接口提供了多种实现类,包括HashSet、TreeSet等,每种实现类有其特定的特性和使用场景。 首先,我们来看看Java Set集合的遍历方式。有两种常见...

    set类计算大学所有同学学分绩

    java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set 学分绩 java set...

    java List、Set与Array之间的相互转换

    在Java编程语言中,数据结构的使用是至关重要的,其中包括List、Set和Array。这三种数据结构各有特点,适用于不同的场景。理解它们之间的相互转换能够帮助我们更好地管理和操作数据。以下将详细介绍Java中List、Set...

    Java中Set的深入研究

    在深入探讨Java中Set接口的实现细节之前,我们先来明确一下Set在Java中的核心概念。Set接口是Java集合框架的一部分,它代表了一个数学抽象集合,即不允许包含重复元素的集合。更正式地讲,根据其Javadoc文档,Set是...

    js中类似于java中的对象Set工具对象Set

    js中终于有了自己的List,类似于java中的List对象,本文件是源码,亲测有如下方法:add()、has(key)、size()、values()、并集union(Set)、子集subset(Set)、差集difference(Set)、交集intersection(Set)、remove(key...

    利用Java Set 去除重复object的方法

    在Java编程中,当我们处理一组数据并希望去除其中的重复元素时,Set接口是一个非常有用的工具。本篇文章将深入探讨如何利用Java Set去除重复的Object对象,并解释在处理自定义对象时重写`equals()`和`hashCode()`...

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    在Java编程中,遍历并删除集合(如List或Set)中的元素是一项常见的操作,但如果不正确地执行,可能会导致`ConcurrentModificationException`异常。这个异常通常在尝试修改正在迭代的集合时出现,因为Java的集合迭代...

    Java Set简介_动力节点Java学院整理

    Java Set简介 Java 中的 Set 集合是数学概念的直观实现,具有不允许重复元素的特性。Set 可以用来过滤其他集合中的元素,得到一个没有重复的新集合。在 Java 中,Set 是一个接口,继承自 Collection 接口,并且不...

    java中三种集合set、map、list的区别与联系

    在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中最常用的是`Set`、`Map`和`List`。这三种集合类型各自具有独特的特性和用途,理解它们之间的区别与联系对于有效地使用Java进行数据管理至关重要...

    如何用Map对象创建Set对象Java开发Java经验技巧

    在Java编程语言中,Map和Set是两种非常重要的集合类型。Map主要用于存储键值对,而Set则是一个不包含重复元素的集合。本篇将详细讲解如何利用Map对象来创建Set对象,这对于Java开发者来说是一个实用的经验技巧。 ...

    java中jython操作把python数据类型转成java类型

    Set&lt;Integer&gt; javaSet = (Set) pythonSet.__tojava__(Set.class); ``` 这将创建一个包含Python集合元素的Java Set。 4. 基本数据类型转换: 对于Python的基本数据类型,如整型、浮点型和字符串,Jython会自动...

    Java 在 Array 和 Set 之间进行转换的示例.rar

    在Java编程语言中,Array和Set是两种不同的数据结构,它们各自有其特性和用途。Array是一种固定大小的序列,可以存储基本类型或对象,并且元素可以通过索引访问。而Set是一个不允许有重复元素的集合,它维护了元素的...

    set转成list集合再排序输出

    Java相关 public static void main(String[] args) { User u1=new User(1, "zhangsan"); User u2=new User(2, "lisan"); User u3=new User(3, "wangsan"); //放入到Set集合中 Set userset=new ...

    对Java中Set的深入研究.pdf

    Java中的Set接口是基于集合概念实现的,它不包含重复元素。Set接口继承自Collection接口,并且不保证集合中元素的顺序,某些Set实现可能会按照插入顺序或特定规则排序。以下是对Java Set实现的一些深入讨论: 1. **...

    【IT十八掌徐培成】Java基础第10天-05.set特点与操作.zip

    Java集合框架是Java编程中不可或缺的一部分,而Set接口则是这个框架中的重要成员。今天我们将深入探讨Set的特点以及在Java中如何进行操作。Set接口代表了一组不包含重复元素的集合,它强调的是元素的唯一性,不保证...

    Java集合知识图谱 ,包含map,list,set

    本知识图谱将详细讲解Java集合中的Map、List和Set三大主要接口,以及它们的实现类。 首先,我们来看“2.3 Java集合图谱.jpg”,这张图谱通常会展示整个Java集合框架的层级结构,包括ArrayList、LinkedList、HashSet...

    IDEA生成set get方法自动带注释信息

    "IDEA生成set get方法自动带注释信息"这个主题涉及到的是IDEA如何帮助开发者自动生成带有注释的getter和setter方法,这是一种常见的面向对象编程中的数据访问和修改方式。 getter和setter方法在Java中被广泛用于...

    java snmp管理 java snmp管理

    Java SNMP(简单网络管理协议)管理是用于监控和管理网络设备的一种标准协议,它允许管理员远程收集和配置网络设备的状态信息。在Java中实现SNMP管理,开发者可以使用各种库来与SNMP代理进行交互,如JSNMP、 SNMP4J...

Global site tag (gtag.js) - Google Analytics