java 学习笔记---集合Set

来源:互联网 发布:vb中inputbox什么意思 编辑:程序博客网 时间:2024/06/05 06:23

集合:就像一个容器,可以把多个对象放进该容器中。

java集合分为:Set List  Map三种体系。

Set : 无序的,不可重复的。

List :有序的,可重复的。

Map:代表有映关系的集合,Map保存的每一项数据都是key-value对。

       java 5 后添加了Queue体系,代表一种队列集合实现。


集合和数组对比:

1.数组一旦初始化,长度不可变;

2:数组无法保存具有映射关系的数据。

3:数组的元素可以是基本类型的值,也可以是对象,而集合智能是保存对象。


java集合由两个接口派生而出:Collection 和 Map,这两个是java 集合框架的根接口。

关系如图所示:





1.Collenction 接口是List、Set、 Queue 接口的父接口,定义的方法:

1.1 boolean add(Object o)

想集合里添加一个元素,如果集合对象被添加操作改变则返回true;

1.2 boolean addAll(Collection c)

将指定 collection 中的所有元素添加到此 collection 中,如果集合对象被添加返回true;

1.3 void clear()

移除次 collection 中的所有元素,将集合长度变为0

1.4 boolean contains(Object o)

如果此 collection 包含指定的元素,则返回true

1.5 boolean containsAll(Collection<?> c)

如果此 collection 包含指定 collection 中的所有元素,则返回 true

1.6 boolean equals(Object o)

比较此 collection 与指定对象是否相等。

1.7 int hashCode()

返回此 collection 的哈希吗值

1.8 boolean isEmpty()

如果此 collection 不包含元素,则返回 true;

1.9 Iterator<E> iterator()

返回一个 Iterator 对象,用于遍历集合里的元素。

1.10 boolean remove(Object o)

从此 collection 中移除指定元素的单个实例,如果存在的话返回true

1.11 boolean remveAll(Collection c)

移除此 collection 中那些包含在指定 collection 中的所有元素,如果存在的话返回true

1.12 boolean retainAll(Collection c)

仅保留此 collection 中那些包含在指定 collection 的元素,如果存在的话返回true;求并集

1.13 int size()

1.14 Object[] toArray()


案例:

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;


public class CollectionTest {
public static void main(String[] args) {
Collection c = new HashSet();
//添加元素:字符串
c.add("孙悟空");
//添加元素:整型 
//该处将6作为一个整型对象来处理
c.add(6);
//输出集合元素的个数
System.out.println("c集合个数为:" + c.size());
//移除指定元素
c.remove(6);
System.out.println("c集合个数为:" + c.size());
//判断集合中是否存在某个元素
System.out.println("判断集合中是否存在某个元素:" + c.contains(6));
c.add("java EE");
System.out.println("c的集合元素:"+ c);
Collection books = new HashSet();
books.add("李莫愁");
books.add("java 讲义");
// c结合是否完全包含books集合
System.out.println("c集合是否完全包含books集合" + c.containsAll(books));
// 用c 减去books集合里的元素
c.removeAll(books);
System.out.println("c的集合元素:" + c);
//删除c集合里所有的元素
c.clear();
System.out.println("c集合里面的元素:" + c);
books.removeAll(c);
System.out.println("books的集合元素: "+ books);
}
}


运行结果:


c集合个数为:2
c集合个数为:1
判断集合中是否存在某个元素:false
c的集合元素:[java EE, 孙悟空]
c集合是否完全包含books集合false
c的集合元素:[java EE, 孙悟空]
c集合里面的元素:[]
books的集合元素: [java 讲义, 李莫愁]


Iterator 遍历就不说了。


Set 集合

无序的,不可重复的,与Collection 基本一样。


判断相同的是否,是通过两个方法来实现的

一定要重写 equals和hashCde 方法



EnumSet 类  
    EnumSet是一个枚举类设计的集合类,EnumSet中的每个元素都必须是指定枚举类型的枚举值。  
EnumSet的集合元素也是有序的,以枚举值在枚举类的定义顺序来决定集合元素的顺序。  
    EnumSet不允许加入null元素,否则会报错。EnumSet内部以单位向量存储,占用内存小,运行高效,尤其批量操作。  
    EnumSet提供了如下常用static方法创建对象:  
    1).allOf(Class<E> elementType)   
          创建一个指定枚举类里所有包含枚举值的EnumSet集合   
    2).complementOf(EnumSet<E> s)   
          创建一个其元素类型与指定枚举 set 相同的枚举 set,最初包含指定 set 中所不包含的此类型的所有元素。   
    3).copyOf(Collection<E> c)   
          使用一个普通集合来创建EnumSet集合   
    4).copyOf(EnumSet<E> s)   
          创建一个与指定EnumSet具有相同元素类型、相同集合元素的EnumSet集合  
    5).noneOf(Class<E> elementType)   
          创建一个具有指定元素类型的空枚举 set。   
    6).of(E e1, E e2, E e3, E e4, E e5......)   
          创建一个最初包含指定元素的枚举 set。   
    7).range(E from, E to)   
          创建一个包含从frome枚举值到to枚举值方位内的所有枚举值的EunmSet集合 


各Set实现类性能分析  
    HashSet 和 TreeSet ,HashSet的整体性能总比TreeSet好,特别是添加和查询操作,只有当一个保持排序的Set时  
才使用TreeSet。  
    LinkedHashSet 和 HashSet ,HashSet的插入和删除略快,但是LinkedHashSet的遍历会比HashSet更快。  
    EnumSet 是所有set中性能最好的,但它只鞥呢保存同一个枚举类的值作为集合。  
    set的三个实现类HashSet、TreeSet、EnumSet都是线程不安全的。多个线程访问或操作Set,必须手动保证该Set的同步性.  


0 0