如何判断set集合是否为空

怎么判断set集合是否为空

Java的集合分为三种
1、集合Set
   Set集合的元素不区分顺序,且不允许出现相同元素。这里同样的元素指的是以equals()方法判断的
2、列表List
   List列表中的记录元素添加的顺序,而且可以填充相同的元素。
3、映射Map
   映射中包含的都是“键(Key)-值(value)”对,且一个键对应一个值。所以键是不可以重复的。
注意:Java集合中只能存储引用类型的引用,且和数组一样集合存储的只是引用并非对象。

Set:
java.util.Collection是Set与List集合接口的根接口这个接口定义一个有关集合操作的普遍方法
例:Set<String> set=new HashSet<String>();
   boolean  add(Object o);   为容器添加一个元素
   boolean  remove(Object o);   移除一个元素
   int      size();    返回数组大小
   boolean  isEmpty();    判断集合是否为空不包含任何元素
   boolean  contains(Object o);   判断集合当中是否包含指定的元素
   void     clear();    清除所有
   Iterator iterator();    返回迭代器,通常是用来对多种容器的统一遍历
   Object[] toArray();    将集合转换为数组

List:
List接口规定使用者可以对列表元素的插入位置进行精确的控制,并添加了根据元素来访问集合某个指定的元素的功能
例:List<String> list=new Vector<String>();
   void     add(int index,Object element); 往指定位置添加或插入新元素
   Object   get(int index);   返回指定下标的元素
   Object   set(int index,Object element); 设定或修改指定位置的元素此方法没有插入功能
   int      indexOf(Object o);   获取指定元素在集合当中的下标,如果没有找到则返回一个负值,一般为-1
   Object   remove(int index);   移除下标指定的元素

Map:
java.util.Map描述了映射结构,Map结构允许以键集、值集合或键-值对映射关系集的形式来访问和查看某个映射的内容
例:Map<Integer,String> map=new Hashtable<Integer,String>();
   Object   put(Object key,Object value); 添加一个键-值对,如果key已经存在,则修改其对应的value
   Object   get(Object key);   获取key对应的value,如果key不存在则返回null
   boolean  isEmpty();    判断当前映射是否为空
   void     clear();    清除映射当中的全部内容
   int      szie();    返回当前映射中有多少对键值
   boolean  containsKey(Object key);  判断当前映射中是否存在指定的key
   boolean  containsValue(Object value); 判断当前映射中是否存在指定的value
   Set      keySet();    返回当前映射中所有的key集合
   Collection values();    返回当前映射中所有的value集合

ArrayList:
一、java.util.ArrayList描述了长度可变的数组列表
例:ArrayList list=new ArrayList();
二、其实ArrayList类内部维护的是一个一维数组,你可以利用ArrayList如果使用默认的构造函数,那么默认的输入大小为10,当我们往里添加的元素数量超过了内部维护的数组的大小,那么每一次的添加都会动态的产生一个一样大小的一维数组,然后在将进行数组拷贝工作。也就是说如果大量的使用自动增长的功能,效率是十分的低的!
我们可以利用public void ensureCapacity(int minCapacity)这个方法一次性扩充数组的长度,减少了不必要的反复赋值数组的浪费效率的操作!
三、ArrayList列表允许元素取值为null,public void trimToSize()可以将当前ArrayList的大小更改为实际存储元素的大小,由于ArrayList内部维护的数组,所有当进行从中间删除或插入对象的时候效率上是十分低的因此我们可以使用以链表形式实现的LinkedList。

LinkedList:
四、java.util.LinkedList以链表的形式实现了List接口,LinkedList加入了在进行插入与删除动作时有较好效果的方法:
例:LinkedList<String> linkedList=new LinkedList<String>();
    public void addFrist(E arg); 往链表头插入元素
    public void addLast(E arg);  往链表尾插入元素
    public E    getFrist();  获取链表首元素
    public E    getLast();  获取链表尾元素
    public E    removeFrist();  移除链表首元素,并返回移除的元素
    public E    removeLast();  移除链表尾元素,并返回移除的元素

Vector:
java.util.Vector也是描述一个可变长度的数组与ArrayList的差别:Vector是同步(线程安全的)多个线程同时操作同一个Vector,因此运行效率低,主要用于多线程的环境下,而ArrayList是不同的,适合在单线程环境下使用。
例:Vector list=new Vector();
常用方法(除实现List接口以外的方法):
public Object elementAt(int index);    返回指定下标的元素
public void   addElement(Object obj);    为容器添加一个元素,同add一样
public void   removeElementAt(int index);   删除指定下标的元素
public void   insertElementAt(Object obj,int index);  指定位置插入元素
public boolean removeElement(Object obj);   查找元素,并删除
public void removeAllElement();     删除所有元素
public Object[] toArray();     将容器转换为数组
注意:看完下面的例子后不难发现ArrayList和Vector的用法完全相同当我们运行的结果是一样,也就是我们不能从结果中看到区别,但是在多线程中Vector表现出更好的安全性……

Stack:
java.util.Stack类继承自Vector类,对应了数据结构中栈这种概念,实际上提供了一种后进先出的数据存储方式和操作数据的对象栈。
例:Stack<String> s=new Stack<String>();
Stack类提供了常规的栈操作方法:
public Stack();     创建一个无限的存储空间,这事理论上的
public Object  push(E item);   向栈内压入一个新的数据,返回当前压入的数据
public Object  pop();    从栈内弹出(删除)最后一个压入的数据,实现弹栈的操作,返回弹出(删除)的数据
public Object  peek();    查看并返回堆栈栈顶的数据(也就是我们最后一次压入栈内的数据),但并没有弹出它
public boolean  empty();   判断栈是否为空
public void  clear();   清空栈
public int  search(Object o);  查找指定元素在栈中的索引,注意此索引由1开始,而且返回的索引时从栈顶向下计算的

Iterator:
java.util.Iterator接口描述的是以统一方式对各种集合元素进行遍历/迭代的工具,也称“迭代器”,Iterator允许当前遍历到的元素进行移除和其他操作
例:ArrayList<String> Array=new ArrayList<String>();
Iteratoc<String> it=Array.iterator();
方法:
boolean hasNext();  判断是否还有下一个元素
Object  next();   返回下一个元素的引用
void    remove();  移除当前遍历到的元素

TreeSet:
例:
TreeSet<String> set=new TreeSet<String>();
java.util.TreeSet类继承自Set接口与java.util.SortedSet接口,TreeSet也是JavaSE中唯一实现了SortedSet接口的类。它描述了一种可以排序的集合,在将对象元素添加到TreeSet集合中时会自动按照某种比较规则将其插入到有序的对象序列中,以保证TreeSet集合元素组成的对象序列时刻按照“升序”排列,默认的排序规则是对象的哈希码进行排序,如果对象有自己的一套排列顺序,要定义一个实现了。
java.util.Comparator接口的对象,并实现接口中的compare()且compare()必须返回int。

HashMap:
例:
HashMap<Integer,String> hm=new HashMap<Integer,String>();
一、java.util.HashMap类实现了java.util.Map接口,该类基于哈希表实现了前述的映射集合结构。
二、HashMap结构不保证其中元素(映射信息)的先后顺序,并且允许使用null值与null键
三、当集合中不存在当前检索的key所对应的映射值时,HashMap的get()方法会返回空值null,而不会运行出错。
四、影响HashMap的性能的链各个参数:初始容量(Initial Capacity)
加载因子(Load Factor)

HashSet:
一、java.util.HashSet类实现了Set接口,描述典型的Set集合结构,主要用于快速查找。
二、HashSet同样不允许出现重复的元素,不保证集合元素的顺序。
三、HashSet的排序规则为哈希码法。
如果用迭代器来遍历容器当中的元素,且想按照加入顺序排列,则可以使用LinkedHashList容器。
四、HashSet中对象的比较顺序为,先判断hashCode()方法返回的值是否相同,在使用equals()方法比较。当两个方法都为true的时候才认定两个为相同对象。
HashSet中只允许包含一个null元素。

HashSet          主要用于快速查找,同样不允许出现重复的元素,不保证集合元素的顺序,只允许包含一个null元素。
TreeSet   按照“升序”进行排列
linkedHashSet    按照加入顺序进行排列

Hashtable:
一、java.util.Hashtable与HashMap作用基本相同,也实现了Map接口,采用哈希表的方式将key映射对应的value。
二、Hashtable与HashMap的差别:
1、Hashtable中元素的key和value均不允许为null,而HashMap中则允许
2、Hashtable是同步的,即线程安全,效率相对要低一些。适合在多线程环境下使用,而HashMap是不同步的,效率相对高一些,适合单线程环境下使用。
三、Hashtable与HashMap的使用格式完全相同。

Enumeration:
一、java.util.Enumeration接口作用与Iterator接口类似,但只提供了遍历Vector和Hashtable(及其子类Properties)类型集合元素的功能,而且不支持集合元素的移除操作
二、方法:
boolean hasMoreElements() 判断是否还有元素
E nextElement()  获取元素

Collections:
java.util.Collections对象中定义了多种集合操作方法,实现了对集合元素的排序、取值、批量拷贝、集合结构转换、循环移位以及匹配性检查等功能
常用方法:
public static void  sort(List list);    将List升序排列
public static void  reverse(List list);    翻转List中所有元素的顺序
public static void  shuffle(List list);    将List中元素的顺序打乱
public static void  copy(List dest,List src);   List的复制,目标List实际元素数量必须比List大,且复制到目标数组的起始位置
public static ArrayList list(Enumeration e);    将实现了Enumeration接口的类对象转换为ArrayList
public static int   frequency(Collection c,Object o);  获取参数2,Object o在容器中出现的次数
public static T     max(Collection coll);    获取最大元素
public static T    min(Collection coll);    获取最小元素
public static void  retate(List list,int distance);      将容器中的元素向后移distance位

Arrays:
一、java.util.Arrays对象定义了多种数组操作方法,实现了对数组元素的排序、填充、转换为列表或字符串形式、增强的检索和深度比较等功能。
二、主要方法:
public static List asList(<T>[] a);   将数组转换为List列表
public static void sort(<T>[] a);   数组元素的升序排列
public static int  binarySearch(<T>[] a,<T> key); 获取key元素在数组中的下标
public static String toString(<T>[] a);   将整个数组所有的元素连接为一个字符串返回

Set:不区分元素的顺序,不允许出现重复的值
list:区分元素的顺序,且允许出现重复的值
map:采用key——values的,不允许有重复的键,每个键最多对应一个值
java集合只能保存引用类型的数据,是对象的引用
Collection接口描述set和list集合类型的根接口
相关方法:
            add()如果增加重复元素,则增加失败,返回false
            contains()判断是否包含有某个元素
            iterator()返回成一个迭代器
List可以对元素的插入位置进行精确控制,根据元素索引访问元素等功能
          set(index,elemetn)修改指定索引下的元素
Map关系集的形式查看某个映射的内容
          put(object key,object values)增加一个新的值
          get(object key)查找key上面的值
          Set keySet()将所有的key返回到一个set中
          Collection values()将所有的值返回到一个collection集合中
Collection——set——hashset/treeset
Collection--list——Arraylist/vector——Stack(栈)
Map——hashmap/Treemap/hashtable——properties
StringTokenizer——Enumeration(不是很常用)
ArrayList类实现了list接口,用于表述长度可度的数组列表
         他允许取值为null,除实现了list接口的所有功能外,还有以下方法
         ArrayList()创建一个容量为10的null的列表
         ArrayList()创建一个指定长度的null的列表
         ensureCapacity(int minCapacity)增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
         trimToSize()将此 ArrayList 实例的容量调整为列表的当前大小(也就是说,出除后面为null的值)
         相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16964.html
Vector也实现了list接口,其描述的也是可变长度的对象数组
         是同步(线程安全的),运行效率要低一些,主要用于多线程环境中,而arryalist是不同步的,适合在单纯种环境中使用
         vector()创建一个长度为10的vector容器
         elementAt(int index)得到指定的值
         addElement(Object ojb)增加值
         removeElementAt(int index)移除指定的值
         insertElecentAt(E obj,index)在指定位置查入相关的值
         removeElement(object obj)删除值,如果有重复的只删除第一次出现的
         Object[] toArray()将当前集合中的元素全部返回到一个数组中
                         相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16965.html
Stack继承了vector,对应了数据结构中的“后进先出”存储和操作数据结象栈
      Stack()创建 一个空的栈
      push()在当前栈中压入一个数据, 把项压入堆栈顶部。
      pop()移除堆栈顶部的对象,并作为此函数的值返回该对象。
      peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
      clear()清空栈
      search(object o)查看栈中的位置,返回最进的一个。以 1 为基数
                   相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16966.html
Iterator接口描述的是以统一方式对各种集合元素遍历/迭代工具,也称"迭代器"
          允许在遍历过程中移除集合中的元素
      hasNext()如果仍有元素可以迭代,则返回 true
      next()返回迭代的下一个元素
      remove()从迭代器指向的 collection 中移除迭代器返回的最后一个元素
                 相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16967.html
HashSet类实现了set接口,描述典型的set集合结构
                  不允许出现重复元素,不保证集合中元素的序
                   允许包含值为null的元素,但最多只能有一个,
                   相关实例请查看http://hi.bccn.net/space-447825-do-blog-id-16968.html
TreeSet类也实现了Set,它描述的是set的一种变体——可以实现排序功能的集合
             将对象元素添加到TreeSet集中时会自动按照某种比较规则将其插入到有序的对象序列中
            以保证TreeSet集合元素组成的对象序列时刻按照“升序”排列
            相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16969.html
Comparable接口中定义的compareTo()方法,实现对整体排序所需的比较逻辑
                  排序称为自然排序,和自然比较
                  如果重写了,compareTo()那么要保证equals()保持一致
                   相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16971.html 
HashMap实现了Map接口  ,基于哈希表的实现了前述的映射集合结构
           不保证其中元素的先后顺序,并且允许null值和null键
          当集合中不存在当前检索的,get()返回的是空,而不会报错
          影响hashMap性能的两个参数:初始容量和加载因子
          相关实例请看:http://hi.bccn.net/space-447825-do-blog-id-16972.html
Hashtable也是采用键和值,键和值不允许为null,
           是同步的,即线程安全的,效率相对要低一些,用于多线程,用法与hashmap完全一样       
Enumeration接口:作用与iterator接口类似,但只提供遍历vector和hashtable(及子类properties)
             且不支持集合元素的移除操作
             些接口不是很常用,这里就不给实例了
Collections定义了多种集合操作的方法,实现对集合元素排序,取极值,批是拷贝,集合结构
          转换,循环移位以及匹配检查等功能
          相关方法:
           sort(List<T> list)  根据元素的自然顺序 对指定列表按升序进行排序。
           reverse(List<?> list)  反转指定列表中元素的顺序。
           shuffle(List<?> list)  使用默认随机源对指定列表进行置换。
           copy(List<? super T> dest, List<? extends T> src) 将所有元素从一个列表复制到另一个列表。
           list(Enumeration<T> e) 返回一个数组列表,它按返回顺序包含指定枚举返回的元素
           frequency(Collection<?> c, Object o) 返回指定 collection 中等于指定对象的元素数
           max(Collection<? extends T> coll)  根据指定比较器产生的顺序,返回给定 collection 的最大元素
           rotate(List<?> list, int distance) 根据指定的距离轮换指定列表中的元素。
               相关实例请查看:http://hi.bccn.net/space-447825-do-blog-id-16973.html
Arrays类定义了多种数组操作方法,实现了对数组元素
                 排序,填充,转换为列表或字符串形式、增强的检索和深度比较等功能
              asList()返回一个受指定数组支持的固定大小的列表
              sort()对指定的 byte 型数组按数字升序进行排序
              binarySearch(int[] a, int key) 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
              toString(Object[] a)  返回指定数组内容的字符串表示形式。