关于android开发中涉及到的java知识:集合类(二)

Java集合(二)
由于前几个星期很忙,所以好久没更,今天我将继续整理关于java类的知识,首先来看下set集合:
●set集合
set与前面的collection基本完全一样,只是它的行为略有不同。set只能加入不同的元素,对于两个相同的元素会添加失败。
set格式:Set students = new HashSet();
  students.add(new String("haha"));
Set集合中有3个实现类:HashSet,TreeSet和EnumSet.
——>先来看下HashSet:
HashSet特点:
1.元素的排列顺序可能与添加次序不同。
2.多个线程访问一个HashSet并同时修改它时必须使用代码保证其同步性。
3.集合的元素值可以为null。
当向HashSet中存入一个元素时会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据其hashCode值决定该对象存储的位置,如果两个元素通过equal()方法比较返回true而hashCode()方法返回值不相等,那么HashSet会将它们存入不同的位置。
所以说HashSet判断两个元素相等的标准是看equal()和hashCode()方法返回值全部为true。
HashSet还有一个子类LinkedHashSet,它可以使得你输入的元素次序与存入元素次序相同,对HashSet有一定的完善作用。
——>我们再来看下TreeSet
TreeSet是SortedSet的接口实现类,它可以保证集合元素处在排序状态,他比HashSet多了以下几个方法:
1.Comparator comparator():如果TreeSet采用了定制排序则返回定制排序时使用的Comparator;如果采用自然排序则返回null。
2.Object first():返回集合中的第一个元素。
3.Object last():返回集合中的最后一个元素。
4.Object lower(Object e):返回集合中位于指定元素之前的元素。
5.Object higher(Object e):返回集合中位于指定元素之后的元素。
6.SortedSet subSet(Object fromElement,Object toElement):返回此Set的子集合,范围从fromElement(包含)到toElement(不包含)。
7.SortedSet headSet(Object toElement):返回此Set的子集,由小于toElement的元素组成。
8.SortedSet tailSet(Object fromElement):返回此Set的子集,大于或等于fromElement的元素组成。
注:TreeSet是根据元素的实际大小来进行排序的。
->自然排序
TreeSet会调用元素的compareTo(Object obj)方法来比较元素间的大小关系,然后对集合进行升序排列,这种方式就是自然排序。
注:向TreeSet中添加的应该是同一个类中的对象,否则会引起ClassCastEception异常。
对于TreeSet集合而言,它判断两个对象是否相等的唯一标准是:两个对象通过compare To(Object obj)方法是否返回0,若返回0,则相等。
->定制排序
想要实现定制排序,则需要在创建TreeSet集合对象时,提供一个Comparator对象与该TreeSet集合关联,由该Comparator对象负责集合元素的排列逻辑。
例:
class M
{
 int age;
 public M(int age)
 {
  this.age = age;
 }
 public String toString()
 {
  return "M[age:" + age + "]";
 }
}
public class TreeSetTest4
{
 public static void main(String[] args)
 {
  TreeSet ts = new TreeSet(new Comparator()
  {
   //根据M对象的age属性来决定大小
   public int compare(Object o1, Object o2)
   {
    M m1 = (M)o1;
    M m2 = (M)o2;
    return m1.age > m2.age ? -1
     : m1.age < m2.age ? 1 : 0;
   }
  }); 
  ts.add(new M(5));
  ts.add(new M(-3));
  ts.add(new M(9));
  System.out.println(ts);
 }
}
——>现在让我们来看下EnumSet:
EnumSet是一个专为枚举类设计的集合类,它里面的所有元素都必须是指定枚举类型的枚举值。
EnumSet也是有序的,它以枚举值在Enum类内的定义顺序来决定集合元素的排序。
EnumSet在内部以位向量的形式储存,所以对象占用内存空间很小,而且运行效率高。但是它不能被加入null元素,如果加入会抛出NullPointerException异常。
EnumSet没有暴露任何构造器来创造实例,程序通过它提供的static方法创建EnumSet对象,例:
1.static EnumSet allOf(Class elementType):创建一个包含指定枚举类里的所有枚举值的EnumSet集合。
2.static EnumSet complementOf(EnumSet s):创建一个与指定EnumSet具有相同元素类型的EnumSet集合,新的EnumSet集合包含原来集合不包含的元素,两个集合加起来才是枚举类中所有的元素。
3.static EnumSet copyOf(Collection c):使用一个普通集合来创建EnumSet集合。
4.static EnumSet copyOf(EnumSet s):创建一个与指定EnumSet具有相同元素类型、相同集合元素的EnumSet集合。
5.static EnumSet noneOf(Class elementType):创建一个元素类型为指定枚举类型的空EnumSet。
6.static EnumSet of(E first,E...rest):创建一个包含一个或多个枚举值的EnumSet集合,传入的枚举值必须属于同一个枚举类。
7.static EnumSet rang(E from,E to):创建一个包含从from枚举值到to枚举值的范围内所有枚举值的EnumSet集合。
总结:如何选择HashSet和TreeSet?
一般来说HashSet比TreeSet性能要好,只有当需要一个保持排序的set时,才应该使用TreeSet。
LinkedHashSet比HashSet稍微慢一些,但遍历LinkedHashSet会更快。
EnumSet是所有Set类中性能最好的,但它只能保存同一个枚举类的枚举值作为集合元素。
Set集合是不安全的,可以通过Collection工具类的synchronizedSortedSet方法来包装set集合类。
例:
SortedSet s = Collection.synchronizedSortedSet(new TreeSet(...));
今天就到这,下次整理关于list集合的内容。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值