(一) 知识回顾
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. sklearn.metrics.roc_curve使用说明

    roc曲线是机器学习中十分重要的一种学习器评估准则,在sklearn中有完整的实现,api函数为sklearn.metrics.roc_curve(params)函数. 官方接口说明:http://s ...

  2. spring boot中 启用aspectj

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  3. 单点登录-JWT(Json Web Tokens)

    来自:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 1.跨域认证 1.用户向服务器发送用户名和密码. 2.服务 ...

  4. Linux UDEV提权过程

    1.下载攻击脚本 [test@H0f ~]$ wget http://www.extmail .org/source/exploit-udev-8478 --2018-04-02 01:21:00-- ...

  5. Hive学习(二)

    1.Hive数据导入 2.Hive的数据查询 3.Hive的Java客户端和自定义函数 1.Hive数据导入 (1.1)使用Load语句导入 HiveQL中提供LOAD DATA命令,用于导入数据到H ...

  6. inventor安装失败怎样卸载安装inventor 2015?

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  7. 在oracle RAC 环境下用 PL/SQL Developer debug procedure 出现 hang 的情况

    现象描述: 用plsql developer 连接编译procedure 的时候都很正常.一旦开始Test进入Debug模式的时候就Hang住了. 初步猜测是没有权限,可是是DBA角色呀,如果没有权限 ...

  8. empty,isset,is_null比较(差异与异同)

    做php开发时候,想必在使用:empty,isset,is_null  这几个函数时候,遇到一些问题.甚至给自己的程序带来一些安全隐患的bug.很多时候,对于isset,empty都认为差不多.因此开 ...

  9. 用java实现删除文件夹里的所有文件

    package com.org.improve.contact; import java.io.File; public class DeletePaper { /** * @param args * ...

  10. Devexpress Xtrareport 并排报表

    什么是并排报表呢? 按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面. 注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用 ...