26.集合框架-Set接口及其子类(2)

Collection接口之下有两个子接口:List接口/Set接口

Set接口及其子类

Set接口是用来处理无序的单列数据,没有重复的元素,重复的元素算一个。
HashSet类--用来处理无序的单列数据,没有重复的元素,重复的元素算一个。
LinkedHashSet类HashSet类的子类

HashSet类

HashSet是Set接口最常用的实现类,底层数据结构是哈希表,HashSet不保证元素的顺序但保证元素必须唯一。

HashSet类构造方法:
HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。 
HashSet(Collection c) 构造一个包含指定集合中的元素的新集合。 
HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。 
HashSet(int initialCapacity, float loadFactor) 具有指定的初始容量和指定的负载因子。 

package com.wangxing.test1;

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

public class TestHashSetClass {

	public static void main(String[] args) {
		//HashSet--java类--实现了Set接口
		//HashSet的构造方法
		//HashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。 
		HashSet  hashset1=new HashSet();
		Set  set1=new HashSet();
		//HashSet(Collection c) 将实现Conllection接口的子类转换成HashSet接口。
		ArrayList  arrayList=new ArrayList();
		HashSet  hashset2=new HashSet(arrayList);
		Set  set2=new HashSet(arrayList);
		//HashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。 
		HashSet  hashset3=new HashSet(26);
		Set  set3=new HashSet(26);
		//HashSet(int initialCapacity, float loadFactor) 具有指定的初始容量和指定的负载因子。 
		HashSet  hashet4=new HashSet(30,0.5f);
		Set  set4=new HashSet(30,0.5f);
	}

}

HashSet类实例方法
boolean    add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
void    clear() 从此集合中删除所有元素。 
boolean    contains(Object o) 如果此集合包含指定的元素,则返回 true 。 
boolean    isEmpty() 如果此集合不包含元素,则返回 true 。 
Iterator    iterator() 返回此集合中元素的迭代器。 
boolean    remove(Object o) 如果存在,则从该集合中删除指定的元素。 
int    size() 返回此集合中的元素数(其基数)。 

package com.wangxing.test1;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class TestHashSetClass2 {
	public static void main(String[] args) {
		HashSet  hashset=new HashSet();
		//HashSet类中的常用实例方法
		//boolean	add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
		hashset.add("hello");
		hashset.add(true);
		hashset.add(12.5);
		hashset.add("hello");
		hashset.add(1234);
		//int	size() 返回此集合中的元素数(其基数)。 
		System.out.println("size=="+hashset.size());
		//boolean	contains(Object o) 如果此集合包含指定的元素,则返回 true 。
		System.out.println("contains=="+hashset.contains("hello"));
		//boolean	remove(Object o) 如果存在,则从该集合中删除指定的元素。
		//hashset.remove("hello");
		//System.out.println("size=="+hashset.size());
		//void	clear() 从此集合中删除所有元素。 
		//hashset.clear();
		//boolean	isEmpty() 如果此集合不包含元素,则返回 true 。  
		//System.out.println("isEmpty=="+hashset.isEmpty());
		
		//遍历HashSet无序集合
		//HashSet无序集合不能使用普通的for循环,因为HashSet中没有与位置相关的操作方法
		//普通的for需要get(int  index)方法,HashSet无序集合中没有这个方法
		//因此不能使用普通的for循环遍历HashSet
		//如果一定要使用普通的for循环遍历HashSet的无序集合?
		//可以使用ArrayList/LinkedList的构造方法,将HashSet这个无序集合转换成有序集合
		ArrayList  arraylist=new ArrayList(hashset);
		for(int  i=0;i<arraylist.size();i++){
			System.out.println("普通的for循环遍历HashSet==="+arraylist.get(i));
		}
		//使用增强的for循环遍历HashSet无序集合
		for(Object obj:hashset){
			System.out.println("增强的for循环--"+obj);
		}
		//Iterator	iterator() 返回此集合中元素的迭代器。 
		Iterator iterator=hashset.iterator();
		while(iterator.hasNext()){
			Object obj=iterator.next();
			System.out.println("迭代器遍历HashSet集合==="+obj);
		}
	}
}

LikedHashSet类

LikedHashSet类是HashSet类的子类

LinkedHashSet也是Set接口的实现类,底层数据结构是链表和哈希表,哈希表用来保证元素唯一,链表用来保证元素的插入顺序,即FIFO(First Input First Output 先进先出)。

LikedHashSet类构造方法:
LikedHashSet() 构造一个新的空集合; 默认初始容量(16)和负载因子(0.75)。 
LikedHashSet(Collection c) 构造一个包含指定集合中的元素的新集合。 
LikedHashSet(int initialCapacity) 构造一个新的空集合; 具有指定的初始容量和默认负载因子(0.75)。 
LikedHashSet(int initialCapacity, float loadFactor) 具有指定的初始容量和指定的负载因子。 

LikedHashSet类实例方法
boolean    add(Object e) 将指定的元素添加到此集合(如果尚未存在)。 
void    clear() 从此集合中删除所有元素。 
boolean    contains(Object o) 如果此集合包含指定的元素,则返回 true 。 
boolean    isEmpty() 如果此集合不包含元素,则返回 true 。 
Iterator    iterator() 返回此集合中元素的迭代器。 
boolean    remove(Object o) 如果存在,则从该集合中删除指定的元素。 
int    size() 返回此集合中的元素数(其基数)。

LikedHashSet类是HashSet类的子类,在构造方法和实例方法的使用是相似的因为此处就不用继续提供代码操作。

LinkedHashSet与HashSet区别?

 HashSet是Set接口最常用的实现类,底层数据结构是哈希表,HashSet不保证元素的顺序但保证元素必须唯一。
LinkedHashSet也是Set接口的实现类,底层数据结构是链表和哈希表,哈希表用来保证元素唯一,链表用来保证元素的插入顺序,即FIFO(First Input First Output 先进先出)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值