(一) 知识回顾
1. day002总结
泛型没有多态。如果泛型能实现多态,那么数据类型就不安全了。违背了设计泛型的初衷。

1.1 伪泛型
泛型只存在编译器,编译生成的字节码中,不存在泛型变量的。

1.2 day002知识回顾
1.2.1 迭代器Iterator
hasNext()、next()
使用迭代器的好处:屏蔽了众多集合内部的内部实现,对外提供统一的遍历方式。任何的单列集合都可以使用迭代器。

1.2.2 增强for
在使用增强for或迭代器遍历集合过程中都不能增删集合元素。

1.2.3 泛型
泛型在集合中的好处
将运行期错误转化为编译器错误,增强了集合的安全性。

泛型方法:
修饰符 <T> 返回值类型 方法名(T 变量名, ...){...}

泛型类:
class 类名<T> {}

泛型接口:
interface 接口名<T> {}

泛型上下限
泛型上限: ? extends Number
泛型下限: ? super Integer

==================================================================================
                      (二)List、Set
1、常用数据结构
1.1 数组
查找快:根据索引找元素
增删慢:每次增删元素需要创建新的数组,需要移动大量的元素

1.2 链表
例子:火车
查询慢:需要从表头或表尾依次移动指针访问元素,来查询指定元素。
确定从表头还是从表尾开始,需要根据索引值是否大于链表长度一半来决定。
增删快:直接改变待增加删除元素的父元素指针的指向,就可以增删元素

1.3 栈
例子:垃圾桶、堆碟子
特点:先进后出(First In Last Out, FILO)

1.4 队列
例子:排队
特点:先进先出(First In First Out, FIFO)

1.5 红黑树
二叉树
每个节点不超过2的树

红黑树

2. Collection集合体系
List
ArrayList
LinkedList

Set
HashSet
LinkedHashSet

3. List集合的特点
有序(存取顺序一致),有索引,元素可重复
List集合常用子类
ArrayList
LindedList

选择ArrayList,还是LinkedList?
如果需要执行大量的增删操作,则选择LinkedList
如果只是做查询操作不需要执行增删操作,则选择ArrayList

4. Set集合
特点:无序(存取顺序不一致),无索引,元素不可重复
Set集合常用子类:
HashSet
LinkedHashSet

Set集合遍历方式:
迭代器、增强for

4.1 HashSet特点
HashSet是Set接口的一个实现类,具有无序、元素不可以重复的特点。 底层是哈希表

   Set集合实现元素不可以重复的存储过程:

对象的哈希值
哈希值是一个十进制的整数
哈希值默认是通过Object调用hashCode()方法获得。
Object返回的哈希值默认是对象在内存中位置。
每一个对象都会有一个哈希值,它是对象存储到哈希表的重要依据。

哈希表存储自定义对象要保证元素唯一性的方式要依赖于:hashCode()方法和equals()方法。
自定义类要重写hashCode()方法和equals()方法

4.2 LinkedHashSet类的特点
继承HashSet,能够保证存取顺序一致
底层是哈希表+链表

5.可变参数
参数列表中只能有一个可变参数,且只能在参数列表中最后一个

6.Collections工具类
java.utils.Collections是集合工具类,用来对集合进行操作。常用方法如下:
a)boolean addAll(Collection<T> c, T ...elements) //向集合中添加一个到多个元素
b)void shuffle(List<?> list) //乱序
c) void sort(List<T> list) //排序
d) void sort(List(T) list, Comparator<? super T> c) //使用自定义的比较器对集合进行比较

6.1 自定义类使用Collections的sort(List(T) list, Comparator<? super T> c)方法进行比较时,
需要定义自己的比较器标准。举例如下:

 Collections.sort(list1, new Comparator<Student>(){
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});

day003-List类、Set类的更多相关文章

  1. 初识UML类图--类之间关系

    前言 最近有打算学习一下设计模式,所以就去看了园子里面左潇龙大哥的设计模式文章,看完之后只有一个感觉,我啥时候也能写出来这么牛逼的文章啊,但是我这语文老师死的早的人还是算了,但是设计模式还是要学的,这 ...

  2. [.net 面向对象编程基础] (9) 类和类的实例

    [.net 面向对象编程基础] (9) 类和类的实例 类 ,顾名思义就是分类.类别的意思.我们要面向对象编程,就需要对不同的事物进行分类.类可以说是.net面向对象的核心. 类:就是具有相同的属性和功 ...

  3. java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),

    建立exception包,建立Bank类,类中有变量double  balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount ...

  4. 19 BasicTaskScheduler0 基本任务调度类基类(一)——Live555源码阅读(一)任务调度相关类

    这是Live555源码阅读的第二部分,包括了任务调度相关的三个类.任务调度是Live555源码中很重要的部分. 本文由乌合之众 lym瞎编,欢迎转载 http://www.cnblogs.com/ol ...

  5. 日期操作类--GregorianCalendar类

    GregorianCalendar--API JavaTM Platform Standard Ed. 6 GregorianCalendar类 Calendar类实现了公历日历,GregorianC ...

  6. Mapper类/Reducer类中的setup方法和cleanup方法以及run方法的介绍

    在hadoop的源码中,基类Mapper类和Reducer类中都是只包含四个方法:setup方法,cleanup方法,run方法,map方法.如下所示: 其方法的调用方式是在run方法中,如下所示: ...

  7. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;

    ArrayList和Array的区别: 相同点:1.两者都实现了IList.ICollection.IEnumerable接口:       2.两者都可以使用证书索引访问集合中的元素,包括读取和赋值 ...

  8. Java API —— Set接口 & HashSet类 & LinkedHashSet类

    1.Set接口     1)Set接口概述         一个不包含重复元素的 collection,无序(存储顺序和取出顺序不一致),唯一.  (List有序,即存储顺序和取出顺序一致,可重复) ...

  9. <九>面向对象分析之UML核心元素之设计类,类,属性,方法,可见性

    设计类

  10. 将Eclipse中现有的java类生成类图

    需求:将Eclipse中现有的java类生成类图 一:什么是ModelGoon? 它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图). 二:安装 下载Mod ...

随机推荐

  1. Vue-Router路由Vue-CLI脚手架和模块化开发 之 路由的动态跳转

    在上一篇的博文中,实现的跳转是在页面中进行实现的 利用vue-router实例方法,使用js对路由进行动态跳转: 1.router.push:参数为路由对象,跳转到指定路由,跳转后会产生历史记录: & ...

  2. MySql8最新配置方式(完美)

    下载MYSQL8 地址:https://www.mysql.com/downloads/ 1.滑动网页到最下面,选择Community (GPL) Downloads » 2.选择MySQL Comm ...

  3. html 一些坑。。。

    margin-left 和 margin-right 才能够使用 auto top 和 bottom 不可以 在网页设计中...通常给img 父容器 一个 宽度...同时 ,指定 img width= ...

  4. js 的 一些操作。。。

    // 对错误图片进行处理 $("img").error(function() { $(this).attr("src", "http://127.0. ...

  5. 奇妙的 clip-path 几何图形

    CSS 新属性 clip-path,意味裁剪路径的意思,让我们可以很便捷的生成各种几何图形. clip-path 通过定义特殊的路径,实现我们想要的图形.而这个路径,正是 SVG 中的 path . ...

  6. stdin stdout stderr 标准I/O流

    Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...

  7. 洛谷1026(字符串dp)

    常规dp.看到数据很小就直接暴力了,没有预处理.kmp好像过分了-- #include <cstdio> #include <cstring> #include <ios ...

  8. Oracle table-lock的5种模式

    Oracle中的锁定可以分为几类: 1.DML lock(data lock), 2.DDL lock(dictionary lock) 3.internal lock/latch. DML lock ...

  9. SSH防入侵

    1.1 ssh防止入侵方法说明 如何防止SSH登录入侵小结: 1.用密钥登录,不用密码登陆 2.牤牛阵法:解决SSH安全问题 a.防火墙封闭SSH,指定源IP限制(局域网.信任公网) b.开启SSH只 ...

  10. thymeleaf总结

    thymeleaf 基本功能是将 th:xxx的内容替换html标签的内容 原标签的内容会被替换掉,原内容只是前端用来显示demo的 和freemarker, velocity的重要区别是,它们的自定 ...