1.常见的数据结构
1.数组(ArrayList)
2.链表(LinkedList)
3.堆栈(栈) 特点 FILO
4.队列 FIFO
2.集合框架的体系
继承体系

Collection(所有集合类接口的超级接口)
|–List:特点 有序(添加的顺序)可以重复的数据
|–ArrayList :查询和修改效率高,但是删除和插入效率低。(线程不安全)
|–LinkedList :插入和删除效率高 (线程不安全)
|–Vector : 线程安全
如何选择

 到底怎么使用如何选择:1.有序(添加的顺序)可以重复的数据2.如果查询和修改的频率高-ArrayList3.如果插入删除频率高-LinkedList4.如果要求线程安全 Vector

3.ArrayList

1多查询API
2.基本数据的维护 常用的CRUD 方法
3.集合的遍历
1.for
2.增强for循环
3.迭代器
1.单向迭代器
1)Iterable 接口 有接口方法
Iterable 接口 有接口方法 Iterator iterator();
返回一个Iterator

IteratorhasNext() 是否有下一个(不会移动指针)next()  返回下一个元素(要移动指针)remove() 删除下一个元素注意:如果尚未调用 next 方法,或者在上一次调用 next 方法之后已经调用了 remove 方法ConcurrentModificationException:不能在迭代过程中对数据源进行改变

2.双向迭代器
2)listIterator
是List下面的方法
所有的list的实现类都可以获取 这个对象
4.LinkedList
1.多查询API
2.基于数据结构的不同,他提供了很多操作头 和尾的方法

2.不重复元素的容器
2.1 如何自定义不能存放重复元素的容器
1、现在需要我们自己设计一个容器类,不能够添加重复元素(如果元素重复了就添加不进去)
2、在前面我们设计的基于数组的自定义容器类的基础上改版
3、需要在add方法内部判断重复
4、如何判断:
每一次调用add会传入一个参数: 用户希望添加的元素 ele
遍历内部的数组,判断数组中是否包含ele
2.2 代码实现

3.HashSet

3.1 语法特点:不重复,无序(不保证和添加顺序一致)
1、不能够添加重复元素
2、初体验
可以添加案例:测试不重复和有序。

3.2 是否重复判断规则
3.2.1 引入
通过一步步测试发现:我们不同HashSet内部到底是如何判断重复的?

3.2.2判断重复的方式
① 通过添加进去的元素的hashCode+eqauls 两者进行比较
② 如果两个对象的hashCode相等 并且 两个对象调用equals结果是true 才认为两个元素重复
③ 示意图

3.2.3验证上面的规则
1 打印上面示例中的元素的hashCode和equals的结果
2 尝试自定义类,覆写hashCode 和 equals 这两个方法中的代码随便写

3.2.4 解读Integer规则
查看hashcode和equals方法源码

3.2.5实际开发情况分析(重点)
1、从上面的示例来看,结果两个都添加进去了,原因:hashCode不等,equals为false
2、从业务上来看(需要向源码时代学生管理系统中添加两个学生信息),觉得这两天数据是同一个人
3、应该怎么做: 在Student中覆写hashCode 和equals方法

4、怎么覆写?
覆写的时候应该参考实际业务中的比较规则,例如姓名,年龄等(还得看Student类中有哪些字段,并且这些字段是业务人员判断的标准)
自动生成:

4.TreeSet

4.1 语法特点
无序:不保证(不记录)我们的添加顺序;但是可以保证添加里面元素是有序的。
public static void main(String[] args) {
Set set = new HashSet();
set.add(“catepillar”);
set.add(“momor”);
set.add(“bush”);
set.add(“cateprillar”);

     System.out.println(set);
}

不重复:不能够添加重复元素(多个心眼)如何判断重复的呢?

4.2 简单体验
体验1

结果: 虽然打印结果的顺序和添加顺序可能不一致,但是感觉结果是有某种规则排序的
说明String类也实现了Comparable接口,String对象可以调用compareTo方法

体验2

结果:居然不能够放不同的类型,但是编译没有错

体验3: 添加自定义的类的对象 Student对象

结果:
疑问1:上面的代码添加的都是同种类型的数据,为什么还报错;
疑问2:为什么提示要把Student转成Comparable
正常情况 ----》 TreeSet 或者 Comparable的文档

4.3 TreeSet的结构(存储原理)分析

4.4 自然排序与定制排序(比较器)
4.4.1 自然排序 Comparable
从TreeSet的API文档中点击 “自然排序” —》 Comparable接口中
文档中的描述:
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

理解:
如果一个类实现了Comparable接口,可以认为这个类的对象具有自然排序的能力(本质就是这个对象可以调用比较的方法compareTo),这种比较和排序的规则就是自然排序

4.4.2 定制排序(比较器)Comparator
1、根据上面的分析,如果我们的对象没有实现Comparable接口,感觉就无法添加到TreeSet中去;(这些对象就没有自然排序的能力);
2、上面的示例设计有点问题:Student类中覆写的compareTo方法按照年龄从小到大排列的,万一有的人也是用我们的Student,希望年龄从大到小进行排列,怎么办?
不管Student里面使用何种规则都不能满足所有的人
3、解决办法: 可以给TreeSet单独的提供一个比较器(理解为比较的一个工具)
4、Comparator 是一个比较器的接口(标准),必须得有进行比较的方法 :compare(Object o1,Object o2);
自定义一个类实现Comparator接口,其中写比较规则 —》 比较器的模板
我们现在需要的是一个具体的比较器对象

示例:

4.5 判断重复的标准
1、如果采用的是自然排序调用对象的compareTo方法,如果返回0 表示相等;
2、如果使用的定制排序(比较器),调用比较器的方法compare 返回0 表示相等;

5.Collection体系

有容乃大——Java集合相关推荐

  1. 有容乃大 ——Java集合(List/Set/Map)

    有容乃大 --Java集合(List/Set/Map) 数据结构的概念 数据结构定义: 数据结构是计算机对数据存储的一种安排. 就是计算机组织.存储数据的方式. 数据结构有哪些? 堆.栈.数组.队列. ...

  2. 有容乃大--Java 集合

    Java集合类:可用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈.队列等.还可以用于保存具有映射关系的关联数组.Java集合大致可以分为Set.List.Map三种体系 其中Set代表无序 ...

  3. 有容乃大 -- Java 集合(List/Set/Map)

    集合框架 学习方法 [知识点的理解和认识] (1) 执行流程[顺序 选择 循环]->独立的方法的使用,对象:线程 (2) 面向对象的编程思想 将具有相同属性和行为的事物抽象出来,划分为类.每一个 ...

  4. collection集合 地址_有容乃大--Java 集合(List/Set/Map)

    1. Collection Collection 是所有集合类的父接口,它定义了集合类最基本的操作方法: Collection 接口 2. List 列表(List)实现了Collection,并拥有 ...

  5. 牛客网 编程初学者入门训练 BC3 有容乃大 Java

    题目来源:牛客网 编程初学者入门训练 BC3 有容乃大 public class Main {public static void main(String[] args) {System.out.pr ...

  6. AWS:云里乾坤,有容乃大

    作者|康翔 编辑|阿冒   设计|沐由 每年年底的AWS re:Invent,是每一位云计算从业者梦寐以求的舞台,这样说真的是毫不夸张. 每次,当我穿行于拉斯,要在三四天的时间里,从多达数百个论坛里找 ...

  7. [Google Guava] 2.3-强大的集合工具类:java.util.Collections中未包含的集合工具

    原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collections包含的工具方法.G ...

  8. Java集合从菜鸟到大神演变

    转载自 Java集合从菜鸟到大神演变 先来看一张集合概况图,这里从上到下列举了几个最经常用的集合 1.集合接口 java.util.Collection 是一个集合接口.它提供了对集合对象进行基本操作 ...

  9. Java集合方面的面试题大汇总

    集合容器概述 什么是集合 集合框架:用于存储数据的容器. 集合框架是为表示和操作集合而规定的一种统一的标准的体系结构. 任何集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 它减少 ...

最新文章

  1. 组策略部署软件----将部署的软件分类
  2. [Swift通天遁地]七、数据与安全-(1)XML文档的创建和解析
  3. Win7+VS2010环境下CEGUI 0.8.4编译过程详解
  4. 浅谈bash shell的种类以及linux系统中的profile和bashrc配置文件
  5. 自动化审批决策树助你面试更上一层楼
  6. 【跃迁之路】【722天】程序员高效学习方法论探索系列(实验阶段479-2019.2.12)...
  7. oracle的游标的属性,Oracle 游标属性
  8. Atitit.guice3 ioc 最佳实践 o9o
  9. 计算机法宝,计算机专业英语学习法宝.doc
  10. 显示“没有注册类”问题解决方法(mscomm)
  11. 临时解决Mac OS系统下kernel_task占用大量CPU资源导致系统卡顿一例(不用删plist文件)
  12. CEF浏览器 模拟鼠标点击
  13. 计算机启动键,U启动U盘启动盘一键启动按键大全
  14. 搜狗浏览器收藏夹误删恢复
  15. cocos2d-lua 3x 基础概念(包括场景、导演、在屏幕上显示自定义对象等)
  16. 如何在scrapy框架里进行调试嘞
  17. 违背妇女意志_2018年国际妇女节:在技术中庆祝妇女
  18. Vue3 suspense
  19. java解压7z格式的压缩包
  20. 还在为美容护肤问题焦虑吗?不妨试试红光光浴#大健康#红光光浴#红光#种光光学

热门文章

  1. 函授计算机大专自我鉴定100字,函授毕业生自我鉴定100字(精选7篇)
  2. 【微信小程序】welcome页面
  3. use traceur in ES6
  4. 解决Scrapy报错: Unknown Command ‘crawl‘
  5. 淘宝店铺订单插旗接口(taobao.trade.memo.update淘宝店铺订单交易备注修改接口)代码对接教程
  6. python类的定义和使用_Python3基础之python 之 面向对象基础(定义类、创|python基础教程|python入门|python教程...
  7. 计算机术语翻译在线,常用计算机专业词汇术语翻译
  8. Mac OS X: Mac电脑安全基础
  9. Clicks can be Cheating: Counterfactual Recommendation for Mitigating Clickbait Issue -- SIGIR‘21
  10. Neo4j CQL(函数、索引、约束)、备份恢复、优化