接口Collection:

Collection是Java的一个集合框架, 也是一个根接口。JDK中没有提供此接口的任何实现,但是提供了更具体的子接口Set和List接口的实现,所有的Collection实现类都是通过这些子接口间接实现了Collection。

Collection接口有两种构造方法,一种用于构造空的Collection,另一种是带有Collection类型单参数的构造方法。该接口常用的方法包括add(E e),addAll(Collection<?> e),clear(),contains(Object o),equals(Object o),isEmpty(),remove(Object o),size(),toArray(),iterator()等等。

常用子接口包括List,Set,Queue等。

一.Set接口:

一个不包含重复元素的Collection,并且最多包含一个null元素,Set中的元素是自动排序的,与添加顺序无关。

具体实现类包括TreeSet,HashSet,EnumSet,均不是线程安全的。

1.常用实现类HashSet和TreeSet

区别如下:

1)HashSet底层是通过哈希表实现的,而TreeSet是通过二叉树实现的。

2)TreeSet类是使用元素的自然顺序对元素进行排序,且同一个TreeSet内的元素类型必须一致 ; 如果TreeSet内的元素是类对象,则该类必需实现Comparable接口为该类定制排序方式并且具有toString方法,如下面代码所示。

HashSet根据哈希值来对元素进行排序。

3)HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的 ;具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复,但是同一个类的对象可以放入不同的实例 。

4)HashSet的性能比Treeset好,因为TreeSet需要额外的红黑树算法来维护集合元素的次序,只有当需要一个保持排序的Set时,才会用TreeSet。

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet; public class Collection_try { public static void main(String[] args){ Set set=new HashSet();
set.add("2");
set.add("1");
set.add("3");
set.add("4");
Iterator i=set.iterator();
while(i.hasNext()){
System.out.println(i.next());
} System.out.println("-------------------------"); A a1=new A(11);
A a2=new A(12);
A a3=new A(13);
A a4=new A(10);
TreeSet set1=new TreeSet();
set1.add(a1);
set1.add(a2);
set1.add(a3);
set1.add(a4); Iterator i1=set1.iterator();
while(i1.hasNext()){
System.out.println(i1.next());
}
System.out.println(set1.size());
} } class A implements Comparable{ private int i; public int getI() {
return i;
} public void setI(int i) {
this.i = i;
} public A(int i){
this.i=i;
} public int compareTo(Object o) //写具体的比较方法
{
A s=(A)o;
if(s.getI()<this.i){
return 1;
}else{
return -1;
}
} public String toString(){
return i+":ok";
}
}

        2.EnumSet

        EnumSet 是一个与枚举类型一起使用的专用 Set 实现,Enumset中所有元素都必须来自单个Enum枚举类型(即必须是同类型,且该类型是Enum的子类),EnumSet的特点是速度方面要优与HashSet和TreeSet 。

如下代码为一个Enum和EnumSet的例子

package mars;

import java.util.EnumSet;

/**
* Created by zhangys on 17-7-21.
*/
public class Collection_EnumSet { public static void main(String [] args){
testTraversalEnum (); //枚举类型的遍历
testEnumSet(); //EnumSet的是一个哦你
} public static void testTraversalEnum (){
Color[] allColor = Color.values ();
for (Color color : allColor) {
System. out .println( " 当前颜色 name : " + color.name());
System. out .println( " 当前颜色 ordinal : " + color.ordinal());
System. out .println( " 当前颜色 value: " + color);
}
} private static void testEnumSet() {
EnumSet<Color> currEnumSet = EnumSet.allOf(Color.class);
for (Color aLightSetElement : currEnumSet) {
System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
}
System.out.println("--------------华丽丽的分割线---------------");
EnumSet<Color> arEnumSet = EnumSet.of(Color.RED,Color.BLACK,Color.BLUE);
for (Color aLightSetElement : arEnumSet) {
System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
}
} public enum Color{ RED(1),BLUE(2),BLACK(3),YELLOW(4),GREEN(5); int node; private Color(int node){ //构造方法,只能为私有
this.node = node;
} public String toString() {
return String.valueOf (node);
}
}
}

随机推荐

  1. 【JS复习笔记】06 方法

    数组的方法: array.concat   一个数组去连接另一个数组,返回一个合成数组.var arrC=arrA.concat(arrB,'asd','sad',true,1.5); array.j ...

  2. vs2012中怎样设为起始页,怎样取消

    把你要设为起始页的文件右键选择为起始页,如下:

  3. jQuery使用ajaxStart()和ajaxStop()方法

    ajaxStart()和ajaxStop()方法是绑定Ajax事件.ajaxStart()方法用于在Ajax请求发出前触发函数,ajaxStop()方法用于在Ajax请求完成后触发函数.它们的调用格式 ...

  4. [小北De编程手记] : Selenium For C# 教程目录

    写<Selnium For C#>系列文章的初衷是因为有很多朋友问我应该从哪里开始学习自动化测试,于是就为大家写下了这个系列的文章,希望对你有些帮助吧.而我想表达的是Selenium(同时 ...

  5. spring bean加载顺序指定方式之一

    在某些情况下,我们在容器启动的时候做一些事情,举个例子,加载缓存等.. 此时我们会希望某个bean先被加载并执行其中的afterpropertiesset方法. 因为spring默认是通过contex ...

  6. SharpGL学习笔记(十五) 纹理映射

    纹理映射非常实用,在游戏场景中已经无所不在了. 一个较少的多边形构成的模形,配合好的纹理贴图进行映射,可以得到逼真的效果.游戏中的天空,地面,墙面,和植物都是纹理贴图进行映射的. 例如最终幻想8的男女 ...

  7. JS中检测数据类型的几种方式及优缺点

    1.typeof 用来检测数据类型的运算符 typeof value 返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."string&quo ...

  8. 生理周期(c++实现)

    描述:人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23 天. 28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如,智力周期的高峰,人会思维 ...

  9. JavaScript基础15——js的DOM对象

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. IOS6学习笔记(四)

    1.GCD设置一个timer计时器 - (void)awakeFromNib { __weak id weakSelf = self; double delayInSeconds = 0.25; _t ...