集合分类:
-------------------| Collection 单列集合的根接口   
---------------| List 如果实现了List接口的集合类,具备的特点是:有序,可重复
-----------| ArrayList ArrayList底层维护的是一个Object类型的数组,特点是:查询快,增删慢
使用场景:如果目前的数据查询多,增删少,那么就使用ArrayList存储数据
注意:使用ArrayList无参构造方法时,Object默认的长度时10,不够的话自动增长0.5倍
-----------| LinkedList LinkedList底层使用了链表数据结构实现的。特点是:查询慢,增删快
使用场景:数据查询少,增删多的时候,用LinkedList存储

---------------| Set 如果实现了Set接口的集合类,具备的特点是:无序,不可重复
注意:Set接口没有get()方法,迭代器才是通用遍历集合的方法,所以我们最好使用迭代器遍历
-----------| HashSet

HashSet的实现原理:
    往HashSet添加元素的时候,HashSet会自动先调用元素的hashCode方法得到元素的哈希表,
    然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置
    
    情况一:如果算出元素的存储位置目前还没有元素,那么该元素可以直接存储到该位置
    
    情况二:如果算出元素的存储位置已经存在其他元素,那么会自动调用equals方法再进行比较一次
    如果equals返回ture那么就视为重复元素,不可添加,如果返回false,那么就可以添加
    
    注意:hashCode和equals方法,都是自动调用的,并不是我们手动调用(注意List接口和Set实现原理不同之处)
-----------| ThreeSet

下面是HashSet的实例

class People{

    int id;
String name; public People(int id , String name) {
this.id = id;
this.name = name;
}
//在现实生活中只要身份证一样那么人也就一样
@Override
public int hashCode() {
//确保相同的id可以找到相同的哈希表的位置
return this.id;
} @Override
public boolean equals(Object obj) {
People p = (People)obj;
return p.id == this.id;
}
//重写是为了可以输出我们需要数据模式(防止println输出时调用Object的toString方法)
@Override
public String toString() { return "{ 省份证:"+this.id+" 姓名:"+this.name+" }";
}
}
public class Demo1 { public static void main(String[] args) {
//创建HashSet对象
HashSet set = new HashSet();
set.add(new People(1001,"狗蛋"));
set.add(new People(1002,"狗娃"));
set.add(new People(1003,"老李"));
//添加一个身份证一样的,姓名不一样的人
set.add(new People(1001,"老八"));
//使用迭代器遍历
Iterator it = set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}

50. Set接口和Set的实现类HashSet的更多相关文章

  1. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  2. .NET开发设计模式-获取某个接口下面所有的派生类

    using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using Sy ...

  3. Mybatis Mapper接口是如何找到实现类的-源码分析

    KeyWords: Mybatis 原理,源码,Mybatis Mapper 接口实现类,代理模式,动态代理,Java动态代理,Proxy.newProxyInstance,Mapper 映射,Map ...

  4. Java8自定义函数式编程接口和便捷的引用类的构造器及方法

    什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...

  5. 4.3.6 对象的界定通过编写接口来访问带这类命名结构的表会出问题。如前所述,SQL Server的灵活性不应用作编写错误代码或创建问题对象的借口。 注意在使用Management Studio的脚本工具时,SQL Server会界定所有的对象。这不是因为这么做是必须的,也不是编写代码的最佳方式,而是因为在界定符中封装所有的对象,比编写脚本引擎来查找需要界定的对象更容易。

    如前所述,在创建对象时,最好避免使用内嵌的空格或保留字作为对象名,但设计人员可能并没有遵守这个最佳实践原则.例如,我当前使用的数据库中有一个审核表名为Transaction,但是Transaction ...

  6. DI容器Ninject在管理接口和实现、基类和派生类并实现依赖注入方面的实例

    当一个类依赖于另一个具体类的时候,这样很容易形成两者间的"强耦合"关系.我们通常根据具体类抽象出一个接口,然后让类来依赖这个接口,这样就形成了"松耦合"关系,有 ...

  7. 高阶函数与接口混入和java匿名类

    高阶函数与接口混入和java匿名类. 高阶函数中的组件(参量)函数相当于面向对象中的混入(接口)类. public abstract class Bird { private String name; ...

  8. Java 基础 - Set接口 及其实现类HashSet/LinkedHashSet/TreeSet

    笔记: /**Set接口 及其实现类 * 公用操作同Collection: * * ①size(),clear()②isEmpty(),③contains(),④add()方法 和remove()方法 ...

  9. 基于小程序请求接口 wx.request 封装的类 axios 请求

    基于小程序请求接口 wx.request 封装的类 axios 请求 Introduction wx.request 的配置.axios 的调用方式 源码戳我 feature 支持 wx.reques ...

随机推荐

  1. Shell内置命令let

  2. shell read变量

  3. ARM 汇编与C之间 的调用

    一. 汇编调用 C 1. 初始化栈 2. 初始化BSS段 (BSS 段是C语言存放未初始化的全局变量,或者初始化为0 的全局变量) 3 .使用 r0 ,r1, r2, r3 给函数传参,如果多于  4 ...

  4. windows 添加永久路由

    打开cmd 命令为: route  add  目的网络    mask   子网掩码     下一跳   -p 添加完成后 可以使用如下命令进行查看: route print

  5. 前端,用js根据一个对象,去除另个对象中重复的元素

    这里的应用场景是,两个div盛放待选项目和已选项目,如下图 <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6"> < ...

  6. Spring的PropertyPlaceholderConfigurer应用(转)

    转自:http://www.cnblogs.com/yl2755/archive/2012/05/06/2486752.html Spring 利用PropertyPlaceholderConfigu ...

  7. vue撸的demo

    之前做过一个layui+flask的测试平台,后来听说vue挺火,学了下,做个记录 一.想法 主要想开发几大功能,方便以后复用 1.工作中常常需要记录知识,所以我决定会做一个类似markdown笔记的 ...

  8. 我的浏览器标签同步方案:坚果云+Floccus

    前言 floccus github地址: https://github.com/marcelklehr/floccus Floccus插件是一款浏览器书签收藏同步插件,支持Chrome和Firefox ...

  9. 手机号码格式验证和 FASTDFS 工具类

    常见大陆和香港号码格式验证 import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex ...

  10. Java 基础 - 继承

    子类继承父类的private字段么? Oracle的Java Documentation对Inheritance的定义: 很直白,定义里面就告诉你了这不叫继承.继承的意思是你可以对其进行直接的调用和修 ...