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

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 速记正则使用(转)

    目录 python 速记正则使用(转) 正则表达式语法 字符与字符类 量词 组与捕获 断言与标记 条件匹配 正则表达式的标志 Python正则表达式模块 四大功能 两种方法 常用方法 匹配对象的属性与 ...

  2. 从线性模型(linear model)衍生出的机器学习分类器(classifier)

    1. 线性模型简介 0x1:线性模型的现实意义 在一个理想的连续世界中,任何非线性的东西都可以被线性的东西来拟合(参考Taylor Expansion公式),所以理论上线性模型可以模拟物理世界中的绝大 ...

  3. 关于使用jwt编写接口时候对token判断时候错误的机制处理

    前言:php在使用接口时候很多时候都是需要带token的,如果不对token进行校验那么别人就能够随意编写一个token进入你的接口拿数据,应该怎样处理呢? //生成token public func ...

  4. 递归处理vue菜单数据

    结构不多说,bean的封装很简单,直接上核心代码吧,自己根据需要把不要的属性自己过滤掉: public List<MenuBo> getMenuByUserId(Long user_id, ...

  5. Linux之防火墙管理篇[Ubuntu:ufw]

    前言 由于近期,腾讯云服务器就要到期了,学生优惠即将失效了,所以准备将数据库和项目迁移到vultr上.然而,在使用nivicat连接mysql数据库的过程中,却屡次出现:Can't connect t ...

  6. HttpClient基本使用

    1.在pom.xml加入对httpclient的必需的jar包的依赖 <!--//httpclient的接口基本都在这儿--> <dependency> <groupId ...

  7. tensorflow 莫烦教程

    1,感谢莫烦 2,第一个实例:用tf拟合线性函数 import tensorflow as tf import numpy as np # create data x_data = np.random ...

  8. CoordinatorLayout 嵌套 AppBarLayout RecyclerView ,通过代码控制,使得CoordinatorLayout 自动滑动到tab置顶的位置

    有两个方式可以实现 一:调用AppBarLayout,设置间距 val behavior = (appbar_layout.getLayoutParams() as CoordinatorLayout ...

  9. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

  10. SimpleDateFormat 常用用法

    1.SimpleDateFormat函数语法:                   G 年代标志符          y 年          M 月          d 日          h ...