接口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。

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. import java.util.TreeSet;
  5.  
  6. public class Collection_try {
  7.  
  8. public static void main(String[] args){
  9.  
  10. Set set=new HashSet();
  11. set.add("2");
  12. set.add("1");
  13. set.add("3");
  14. set.add("4");
  15. Iterator i=set.iterator();
  16. while(i.hasNext()){
  17. System.out.println(i.next());
  18. }
  19.  
  20. System.out.println("-------------------------");
  21.  
  22. A a1=new A(11);
  23. A a2=new A(12);
  24. A a3=new A(13);
  25. A a4=new A(10);
  26. TreeSet set1=new TreeSet();
  27. set1.add(a1);
  28. set1.add(a2);
  29. set1.add(a3);
  30. set1.add(a4);
  31.  
  32. Iterator i1=set1.iterator();
  33. while(i1.hasNext()){
  34. System.out.println(i1.next());
  35. }
  36. System.out.println(set1.size());
  37. }
  38.  
  39. }
  40.  
  41. class A implements Comparable{
  42.  
  43. private int i;
  44.  
  45. public int getI() {
  46. return i;
  47. }
  48.  
  49. public void setI(int i) {
  50. this.i = i;
  51. }
  52.  
  53. public A(int i){
  54. this.i=i;
  55. }
  56.  
  57. public int compareTo(Object o) //写具体的比较方法
  58. {
  59. A s=(A)o;
  60. if(s.getI()<this.i){
  61. return 1;
  62. }else{
  63. return -1;
  64. }
  65. }
  66.  
  67. public String toString(){
  68. return i+":ok";
  69. }
  70. }

        2.EnumSet

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

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

  1. package mars;
  2.  
  3. import java.util.EnumSet;
  4.  
  5. /**
  6. * Created by zhangys on 17-7-21.
  7. */
  8. public class Collection_EnumSet {
  9.  
  10. public static void main(String [] args){
  11. testTraversalEnum (); //枚举类型的遍历
  12. testEnumSet(); //EnumSet的是一个哦你
  13. }
  14.  
  15. public static void testTraversalEnum (){
  16. Color[] allColor = Color.values ();
  17. for (Color color : allColor) {
  18. System. out .println( " 当前颜色 name : " + color.name());
  19. System. out .println( " 当前颜色 ordinal : " + color.ordinal());
  20. System. out .println( " 当前颜色 value: " + color);
  21. }
  22. }
  23.  
  24. private static void testEnumSet() {
  25. EnumSet<Color> currEnumSet = EnumSet.allOf(Color.class);
  26. for (Color aLightSetElement : currEnumSet) {
  27. System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
  28. }
  29. System.out.println("--------------华丽丽的分割线---------------");
  30. EnumSet<Color> arEnumSet = EnumSet.of(Color.RED,Color.BLACK,Color.BLUE);
  31. for (Color aLightSetElement : arEnumSet) {
  32. System. out .println( " 当前 EnumSet 中数据为: " + aLightSetElement);
  33. }
  34. }
  35.  
  36. public enum Color{
  37.  
  38. RED(1),BLUE(2),BLACK(3),YELLOW(4),GREEN(5);
  39.  
  40. int node;
  41.  
  42. private Color(int node){ //构造方法,只能为私有
  43. this.node = node;
  44. }
  45.  
  46. public String toString() {
  47. return String.valueOf (node);
  48. }
  49. }
  50. }

Collection集合学习(一)———Set接口与具体实现的更多相关文章

  1. ------------------java collection 集合学习 ----小白学习笔记,,有错,请指出谢谢

    <!doctype html>java对象集合学习记录 figure:first-child { margin-top: -20px; } #write ol, #write ul { p ...

  2. Collection集合学习(二)———List接口与具体实现

    二.List接口: 一个可以包含重复元素的Collection,List中的元素不会自动排序,元素顺序由添加时的顺序决定. 具体实现类包括Vector(线程安全的),ArrayList,LinkedL ...

  3. java学习笔记——Collection集合接口

    NO 方法名称 描述 1 public boolean add(E e) 向集合中保存数据 2 public void clear() 清空集合 3 public boolean contains(O ...

  4. JavaSE中Collection集合框架学习笔记(1)——具有索引的List

    前言:因为最近要重新找工作,Collection(集合)是面试中出现频率非常高的基础考察点,所以好好恶补了一番. 复习过程中深感之前的学习不系统,而且不能再像刚毕业那样死背面试题,例如:String是 ...

  5. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  6. JavaSE中Collection集合框架学习笔记(3)——遍历对象的Iterator和收集对象后的排序

    前言:暑期应该开始了,因为小区对面的小学这两天早上都没有像以往那样一到七八点钟就人声喧闹.车水马龙. 前两篇文章介绍了Collection框架的主要接口和常用类,例如List.Set.Queue,和A ...

  7. 【java读书笔记】——Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

    两个月之前准备软考时,简单的从理论上总结了最经常使用的数据结构和算法,比方:线性表,链表,图.在进行java开发时,jdk为我们提供了一系列对应的类来实现主要的数据结构.jdk所提供的容器API位于j ...

  8. Collection集合之六大接口(Collection、Set、List、Map、Iterator和Comparable)

    首先,我们先看一下Collection集合的基本结构: 1.Collection接口 Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和 ...

  9. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_01 Collection集合_4_Iterator接口介绍

    collection集合中是没有索引的,不能使用普通的循环来便利它. 也是在util的包中 先判断集合中有没有元素 有元素就取出来,用next方法 使用接口来接受一个实现类,这就是多态

随机推荐

  1. make笔记

    Makefile基本格式如下: target ... : prerequisites ... command ... ... 其中, target - 目标文件, 可以是 Object File, 也 ...

  2. GridView 控制默认分页页码间距 及字体大小

    GridView 控制默认分页页码间距 及字体大小 PagerCss TD A:hover { WIDTH: 20px; COLOR: black; padding-left: 4px; paddin ...

  3. mssqlserver SQL注释快捷键

    注释快捷键 选中语句(快捷键:光标定位到需要注释块的最顶行,按住shift+home选中行,放开再按下shift+向下键,选中块) 按住Ctrl然后依次按K,C取消注释快捷键 选中语句 按住Ctrl然 ...

  4. CentOS 7常用工具安装

    git 在Linux下开发项目,少不了要使用git工具,安装方法十分简单,通过一条 yum 指令既可完成安装: yum install git 安装完成后检测版本: # git --version g ...

  5. Vim技能修炼教程(9) - 缓冲区和标签页

    缓冲区 上一节我们学习了窗口相关的命令,其实多窗口的最大功能在于存放多个不同的缓冲区. 文件载入内存之后,我们操作的其实是缓冲区.:write命令就是将缓冲区写回文件的目的. 查看内存中的缓冲区 通过 ...

  6. 单一功能学习——百度AI之身份证识别

    以下内容基本是从官方接口文档复制过来的,附带自己封装的代码 时间:2018年4月4日 一.导入工具包 使用maven依赖: <dependency> <groupId>com. ...

  7. vue轮播图

    vue开发中遇到这样一个需求实现导航栏和中间内容相结合实现页面滑动导航跟随改变的效果.看效果: 这里我用的是vue所带的插件:vue-awesome-swiper,传送门:https://www.np ...

  8. [转载]Unicode中对中文字符的编码

    以前写过一篇贴子是写中文在unicode中的编码范围 unicode中文范围,但写的不是很详细,今天再次研究了下unicode,并给出详细的unicode取值范围. 本次研究的unicode对象是un ...

  9. 内联汇编实现 memcpy 和 memset

    #pragma check_stack( off) LPVOID __cdecl _memcpy(void * dst, void* src, size_t size) { int dwSize = ...

  10. Netflix OSS 和 SpringCloud Netflix简介

    Netflix OSS Netflix是一家互联网流媒体播放商,是美国视频巨头,随着Netflix转型为一家云计算公司,它也开始积极参与开源项目. Netflix OSS(Open Source)就是 ...