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 先进先出)。