接口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. [moka同学笔记]yii2.0查询数据库

      一. [:id占位符]使用 $results = Test::findBySql($sql,array(':id'=>'1 or 1=1))->all()   二. [id=1]  选 ...

  2. LGLCalender (价格日历)

    一直未能找到自己想要的日历价格,就算右也不是我想要的,今天自己封装了一个,欢迎各位来查阅,不足的地方请指教 最新代码下载地址https://github.com/liguoliangiOS/LGLCa ...

  3. winform(公共控件)

    一.客户端设计思路 1.理顺设计思路,架构框架 2.设计界面 3.编写后台代码 4.数据库访问 二.公共控件 1.Button(按钮): ⑴ Enabled :确定是否启用控件 ⑵ Visible:确 ...

  4. Vue入门演示

    工作中用了很久vue,但是都是我们这边前端经理封装好的组件,想要看到底部的原理还要从层层代码里面剥离出来,逻辑太复杂,还不如自己一点点整理一下,一步一步走下去. github地址:https://gi ...

  5. NPOI Excel类

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using NPOI.HSSF.Us ...

  6. Objective-C

    1.OC基础 第一个OC的类 Objective-C: 字符串NSString与NSMutableString iOS开发的入门总结的第一篇 iOS开发的入门总结的第二篇

  7. C语言接口与实现实例

    一个模块有两部分组成:接口和实现.接口指明模块要做什么,它声明了使用该模块的代码可用的标识符.类型和例程,实现指明模块是如何完成其接口声明的目标的,一个给定的模块通常只有一个接口,但是可能会有许多种实 ...

  8. iOS-RegexKitLite导入错误

    RegexKitLite是什么? RegexKitLite是一个非常方便的处理正则表达式的第三方类库. 本身只有一个RegexKitLite.h和RegexKitLite.m 导入RegexKitLi ...

  9. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  10. iOS开发之网络编程--3、NSURLSessionDataTask实现文件下载(离线断点续传下载)

    前言:使用NSURLSessionDownloadTask满足不这个需要离线断点续传的下载需求,所以这里就需要使用NSURLSessionDataTask的代理方法来处理下载大文件,并且实现离线断点续 ...