一、集合(定义字段的时候统一使用包装类

1、集合大类分为List、Set、Map三种,其中,List集合是有序可重复的,并且可以使用普通for循环、增强for循环、正向迭代器、双向迭代器;Set集合是无序不可重复的,不可以使用普通for循环和双向迭代器,只能使用增强for循环和正向迭代器;Map集合也是无序不可重复的,只能存储键值对(也就是我们太容易对象),Map集合本身不能使用任意的循环方式。

二、Set集合

1、HashSet集合(HashSet集合里面传入了匿名对象的话,那么它的删除也是根据HashCode和equals方法来判断的。)

HashSet集合是无序、不可重复的,它的底层是使用了HashMap实现的,HashMap的底层是数组和链表实现的;无序指的是增加元素的顺序和取出元素的顺序不一定一致,不可重复是因为它使用了通过首先获取HashCode值,再通过Hash算法将HashCode值算出索引,最后比较equals方法来决定两个值是否重复(其中,如果两个数据通过HashCode值算出的索引一致,那么会在同索引处比较equals方法,如果不一致,则会通过链表结构将数据挂在此索引的位置,如果算出的索引一致,那么就不会使用equals方法)(其实你的HashCode值相等,通过Hash算法算出的索引也就像等,所以不必强调这个)

Set的继承特点:

Set 无序的,不可重复的,不能使用普通for循环和双向迭代器

|

|__HashSet   TreeSet

List  有序的,并且数据可重复的可以使用偏头痛for循环、增强for循环、正向迭代器、双向迭代器

|

|___ArrayList   LinkedList

2、TreeSet集合

TreeSet集合特点:无序(添加元素的顺序和取出元素的顺序不一定是相同的)、不可重复的(判断重复的方法:

①compareTo方法返回0,表示相等;②compare方法返回0,则表示相等),是基于二叉树实现的。

包装类都实现了comparable接口,因此都覆写了compareTo方法(具有了排序功能),一个普通类的对象本身是没有排序的功能的,但是由于实现了Comparable接口,因此对象就具有了排序的功能。

CompareTo方法如果返回正数、或者负数都会按照不一致的自然方法进行排序,但是如果返回0,则表示对象都相等,意味着TreeSet集合只存储了第一个元素

注意:TreeSet集合内部没有实现ListIterator接口,因此不能使用双向迭代器,又因为TreeSet集合是无序的,因此不能够使用普通for循环(不能按照指定的索引取到值)

注意:TreeSet容器存储的值必须要拥有自然排序或者定制排序(比较器)的能力

如果一个类实现了Comparator接口,那么这个类就是一个比较类,在TreeSet集合中有一个构造方法是

TreeSet(SortedSet<E> s) 构造一个按照比较类规则来进行比较集合中元素的方法,然后将这个比较类的对象传入集合的对象中,就可以使用定制排序(比较器)了(最好使用匿名内部类)。

Set接口下的集合的更多相关文章

  1. List接口下的集合

    集合框架 List接口下的集合特点: Set接口下的集合特点: 1.都是有序的 1.都是无序的 2.都有下标 2.没有下标 3.都可以重复 3.不可重复(覆盖) List接口下的集合 1.ArrayL ...

  2. Map接口下的集合和泛型理解

    一.Map接口 1. Map接口就是最顶层了,上面没有继承了.Map是一个容器接口,它与前面学的List.Set容器不同的是前面学的这些容器,一次只能传入一个元素,但是Map容器一次可以传入一对元素( ...

  3. C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能

    1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...

  4. .net 下的集合

    集合的操作在编码的时候很常见.但是由于经常使用几种集合.而忽略了一些不常用的集合.在这里我整理下. 首先先了解下接口: 1.IEnumerable,返回一个循环访问集合的枚举器. 2.IEnumera ...

  5. 容器之List接口下各实现类(Vector,ArrayList 和LinkedList)的线程安全问题

    Vector .ArrayList 和LinkedList都是List接口下的实现类,但是他们之间的区别和联系是什么呢? 首先: 然后: 如果您仅仅想知道结论,那么可以关闭了. 下面我讨论讨论为什么. ...

  6. IIC接口下的24C02 驱动分析

    本节来学习IIC接口下的24C02 驱动分析,本节学完后,再来学习Linux下如何使用IIC操作24C02 1.I2C通信介绍 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多 ...

  7. [知了堂学习笔记]_集合接口list与集合接口set的区别

    在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...

  8. C++下实现同接口下多个类作为参数的调用和传参

    /* 实现同接口下不同类的对象的转移 定义类的接口 定义多个继承该接口的类 定义管理类,把接口当作类型, 传入该接口下各种类的对象,进行操作 */ #include<iostream> # ...

  9. 集合接口list与集合接口set的区别

    在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...

随机推荐

  1. Python菜鸟快乐游戏编程_pygame(2)

    Python菜鸟快乐游戏编程_pygame(博主录制,2K分辨率,超高清) https://study.163.com/course/courseMain.htm?courseId=100618802 ...

  2. python的多线程

    1.多线程的例子 import threading #首先导入threading模块,这是使用多线程的前提 from time import ctime,sleep def music(func): ...

  3. 开放源代码的设计层面框架Spring——day03

    spring第三天     一.AOP的相关概念         1.1AOP概述             1.1.1什么是AOP                 AOP:全称是Aspext Orie ...

  4. (Python3) 连加 连乘 代码

    a=[1,2,3,4,5,6,7,8,9,10] #连加 b=0 for i in a: b+=i print(b)   #连乘 c=1 for i in a: c*=i print(c)

  5. 关于HashSet集合add元素

    HashSet集合add元素底层实现使用的是HashMap. 简单记忆:无论HashMap put元素还是HashSet add元素,都先调用hashCode()方法,若hashCode方法返回值不同 ...

  6. 在线制作微信跳转浏览器下载app/打开指定页面源码

    微信自动跳转外部浏览器下载app/打开指定页面源码 源码说明: 适用安卓和苹果系统,支持任何网页链接.并且无论链接是否已经被微信拦截,均可实现微信内自动跳转浏览器打开. 生成的跳转链接具有极佳的防拦截 ...

  7. django_1

    新闻 管理   Django-1   一 什么是web框架? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你 ...

  8. Maven - 镜像<mirror>

    使用镜像如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库),你可以使用set ...

  9. 结合jira搭建自动化测试平台

    mysql 语句查看 python manage.py sqlmigrate your_app_name 0001 代码如下 #coding=utf8 #https://jira.readthedoc ...

  10. 微信小程序开发学习(二)

    一些官方API 总结了一些官方API,便于之后有用时针对性查找(发现官方给了好多好用的API)官方API文档 基础 wx.canIUse:判断小程序的API,回调,参数,组件等是否在当前版本可用,返回 ...