HashSet<E>泛型类

HashSet<E>泛型类在数据组织上类似于数学上的集合,可以进行“交”、“并”、“差”等运算。

1、HashSet<E>对象

HashSet<E>泛型类创建的对象称为集合,如:

<span style="font-family:Microsoft YaHei;font-size:14px;">HashSet<String> set = HashSet<String>; </span>

那么set就是一个可以存储 string 类型数据的集合,set 可以调用 add(String s) 方法将 string 类型的数据添加到集合中。添加到集合中的数据称为集合的元素。集合不允许有相同的元素,也就是说,如果b已经是集合中的元素,那么在执行 set.add(b)操作是无效的。集合对象的初始容量是16字节装载因子是0.75。也就是说,如果集合添加的元素超过总容量的75%时,集合的容量将增加1倍。

2、常用方法

HashSet<E>泛型类的常用方法如下:

① public boolean add(E o)   —— 向集合添加参数指定的元素。

② public void clear()   ——清空集合,使集合不含有任何元素。

③ public boolean contains(Object o)   —— 判断参数指定的数据是否属于集合。

④ public boolean isEmpty()   —— 判断集合是否为空。

⑤ public boolean remove(Object o)   ——集合删除参数指定的元素。

⑥ public int size ()   —— 返回集合中元素的个数。

⑦ Object [ ] toArray()   —— 将集合元素存放到数组中,并返回这个数组。

⑧ boolean containsAll (HashSet set)   —— 判断当前集合是否包含参数指定的集合。

⑨ public Object clone ()   —— 得到当前集合的一个克隆对象,该对象中元素的改变不会影响到当前集合中的元素,反之亦然。、

我们可以借助泛型类Iterator<E>实现遍历集合,一个集合对象可以使用iterator() 方法返回一个Iterator<E>类型的对象,如果集合是“Student类型”的集合,即集合中的元素是Student类创建的对象,那么该集合使用iterator() 方法放回一个Iterator<Student>类型的对象,该对象使用next()方法遍历集合。

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">package com.chindroid.date;

import java.util.HashSet;
import java.util.Iterator;

class Student{
	String name;
	int score;
	Student(String name, int score){
		this.name = name;
		this.score = score;
	}
}

public class TestHashSet {

	public static void main(String[] args) {
		Student zh = new Student("张红铭",77);
		Student wa = new Student("王家家",68);
		Student li = new Student("李佳佳",67);

		HashSet<Student> set = new HashSet<Student>();
		HashSet<Student> subset = new HashSet<Student>();

		set.add(zh);
		set.add(wa);
		set.add(li);

		subset.add(wa);
		subset.add(li);

		if (set.contains(wa)){
			System.out.println("集合set中含有:"+wa.name);
		}
		if(set.containsAll(subset)){
			System.out.println("集合set包含集合subset");
		}
		int number = subset.size();
		System.out.println("集合subset中有"+number+"个元素:");
		Object s[] = subset.toArray();
		for(int i=0; i<s.length; i++){
			System.out.printf("姓名:%s,分数:%d\n", ((Student)s[i]).name,((Student)s[i]).score);
		}
		number = set.size();
		System.out.println("集合set中有"+"个元素:");
		Iterator<Student> iter = set.iterator();
		while(iter.hasNext()){
			Student te = iter.next();
			System.out.printf("姓名:%s, 分数:%d\n", te.name,te.score);
		}
	}
}
</span></span>

程序输出结果如下:

集合set中含有:王家家

集合set包含集合subset

集合subset中有2个元素:

姓名:王家家,分数:68

姓名:李佳佳,分数:67

集合set中有个元素:

姓名:王家家, 分数:68

姓名:张红铭, 分数:77

姓名:李佳佳, 分数:67

3、集合的交、并与差

集合对象调用boolean addAll(HashSet set) 方法可以与参数指定的集合求并运算,使得当前集合成为两个集合的并。

集合对象调用boolean retainAll(HashSet set )方法可以与参数指定的集合求交运算,使得当前集合成为两个集合的交。

集合对象调用boolean removeAll (HashSet set ) 方法可以与参数指定的集合求差运算,使得当前集合成为两个集合的差。

参数指定的集合必须与当前集合是同种类型的集合,否则上述方法返回false。

<span style="font-family:Microsoft YaHei;font-size:14px;"><span style="font-family:Microsoft YaHei;font-size:14px;">package com.chindroid.date;

import java.util.HashSet;
import java.util.Iterator;

public class TestHashset2 {
	public static void main(String[] args) {

		Integer one = new Integer(1);
		Integer two = new Integer(2);
		Integer three = new Integer(3);
		Integer four = new Integer(4);
		Integer five = new Integer(5);
		Integer six = new Integer(6);

		HashSet<Integer> A = new HashSet<Integer>();
		HashSet<Integer> B = new HashSet<Integer>();
		HashSet<Integer> tempSet = new HashSet<Integer>();

		A.add(one);
		A.add(two);
		A.add(three);
		A.add(four);

		B.add(one);
		B.add(two);
		B.add(five);
		B.add(six);

		tempSet = (HashSet<Integer>)A.clone();
		A.removeAll(B);
		B.removeAll(tempSet);
		B.addAll(A);

		int number = B.size();

		System.out.println("A和B的对称差集合有" + number + "个元素:");

		Iterator<Integer> iter = B.iterator();
		while (iter.hasNext()){
			Integer te = iter.next();
			System.out.printf("%d,",te.intValue());
		}
	}
}
</span></span>

程序输出结果如下:

A和B的对称差集合有4个元素:

3,4,5,6,

4、HashSet<E>泛型类实现的接口

HashSet<E>泛型类实现了泛型接口Set<E>,而Set<E>接口是Collection<E>接口的子接口。HashSet<E>类中的绝大部分方法都是接口方法的实现。编程时,可以使用接口回调技术,即把HashSet<E>对象的引用赋值给Collection<E>接口变量或Set<E>接口变量,那么接口就可以调用实现的接口方法。

时间: 2024-08-30 14:50:02

HashSet<E>泛型类的相关文章

HashSet -无序,不重复集合

1 package cn.learn.collection.Set; 2 3 import java.util.Objects; 4 5 public class IsPerson { 6 private int age; 7 private String name; 8 9 //ide自动生成 10 @Override 11 public boolean equals(Object o) { 12 if (this == o) return true; 13 if (o == null ||

hashSet

import java.util.HashSet; import javax.print.attribute.HashAttributeSet; /* 集合 的体系: ------------| Collection 单例集合的根接口 ----------------| List 如果是实现了List接口的集合类,具备的特点: 有序,可重复. -------------------| ArrayList ArrayList 底层是维护了一个Object数组实现的. 特点: 查询速度快,增删慢.

java HashSet 与 TreeSet

Set接口并没有对Collection接口进行扩充,只是比Collection接口要求更加严格了,不能增加重复的元素,并且采用散列的储存方式,所以没有顺序 import java.util.Set; import java.util.HashSet; import java.util.TreeSet; public class Test { public static void main(String[] args) { //Set allSet = new HashSet();//@结果 1

HashSet的简单实现

HashSet的巧妙实现:就是建立一个“键值对”,“键”就是我们要存入的对象,“值”则是一个常量.这样可以确保, 我们所需要的存储的信息之是“键”.而“键”在Map中是不能重复的,这就保证了我们存入Set中的所有的元素都不重复.而判断是否添加元素成功,则是通 过判断我们向Map中存入的“键值对”是否已经存在,如果存在的话,那么返回值肯定是常量:PRESENT ,表示添加失败.如果不存在,返回值就为null 表示添加成功.

HashSet,TreeSet和LinkedHashSet的区别

Set接口Set不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add方法返回false.Set判断两个对象相同不是使用==运算符,而是根据equals方法.也就是说,只要两个对象用equals方法比较返回true,Set就不 会接受这两个对象. HashSet: 顺序是不确定性的. LinkedHashSet:按照输入的顺序进行输出. TreeSet:SortedSet 接口的唯一实现类,保证集合元素处于排序状态. 1.HashSetHashSet有以下特点    不能保证元素的

Java泛型类泛型方法

使用泛型,在某些情况下可以有效减少代码量. Pair泛型类可以根据传入的参数类型进行相应的构造. minmax是泛型方法,不同数据类型的数组,也可以得到他们的min max值,需要注意的是传进去的T[]类类型必须是实现了Comparable方法的,否则无法调用compareTo()方法. 另外,泛型的类型必须是类类型,int, double, float这种是不行的,必须是Integer, Double, Float, String, StudentClass这种类类型的. /** 泛型类 *

Core Java 简单谈谈HashSet

同学们在看这个问题的时候,我先提出者两个问题,然后大家带着问题看这个文章会理解的更好. HashSet为什么添加元素时不能添加重复元素? HashSet是否添加null元素? 打开源码, 我们看到如下代码,我们看到HashSet也有一个HashMap做为属性,HashSet()的构造方法就是将这个map实例化.如果大家对HashMap还不了解话,可以看我的这篇博文.还要注意有一个静态final的对象PRESENT,这个是干什么用的,咱们继续往下看. private transient HashM

java源码分析之HashSet

http://blog.csdn.net/jzhf2012/article/details/8540696 Java容器类的用途是"保存对象",分为两类:Map--存储"键值对"组成的对象:Collection--存储独立元素.Collection又可以分为List和Set两大块.List保持元素的顺序,而Set不能有重复的元素. 本文分析Set中最常用的HashSet类,并简单介绍和对比LinkedHashSet. 首先对Set接口进行简要的说明. 存入Set的每

练习:往HashSet中存储学生对象(姓名,年龄) 同姓名,同年龄视为一个人,不存

具体源码实现 package com.runoob.test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class HashSetTest { public static void main(String[] args) { // TODO Auto-generated method stub /* * 练习:往HashSet中存储学生对象(姓名,年龄) 同姓名,同年龄视为