(一) 知识回顾
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. error : Could not load UI satellite dll 'TrackerUI.dll'. Make sure it exists in an LCID subdirectory of 'C:\Program Files (x86)\MSBuild\12.0\bin\'.

    原因  VS2013 + QT环境部署好后, 又安装了VS2015\ 解决方案:  在另一台电脑里重装VS2013, 并将  C:\Program Files (x86)\MSBuild\12.0\B ...

  2. Qt 学习之路 2(2):Qt 简介

    Home / Qt 学习之路 2 / Qt 学习之路 2(2):Qt 简介 Qt 学习之路 2(2):Qt 简介  豆子  2012年8月21日  Qt 学习之路 2  43条评论 Qt 是一个著名的 ...

  3. jquery知识点结合使用

    1.在页面的某个具有id的element内插入其他element,并给其增加悬浮提示. $('#id').after('<div id='box'></div>'); $('# ...

  4. 10-排序5 PAT Judge (25 分)

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  5. TensorFlow入门测试程序

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist=input_data. ...

  6. Web开发中FormData对象的使用

    参考: FormData 对象的使用 - Web API 接口 | MDN

  7. Web 2.0 浏览器端可靠性测试第1部分(浏览器端可靠性测试的概念和背景)

    Web 2.0 是一个体现当代网络技术发展趋势的流行概念.它使得基于 Web 的信息交互和用户间协作性更加灵活和丰富.很多的社交网站.博客.wiki,都是 Web 2.0 技术的典型应用. 我们知道, ...

  8. Android官方架构组件介绍之LifeCycle(一)

    Android官方架构组件介绍之LifeCycle 下面是官方提供的Android App开发的架构图: 从上图可以看到一些关键字:ViewModel,LiveData,Room等.其实看了上面视频的 ...

  9. Kudu安装(官网推荐的步骤)(installing build Kudu from source)

    不多说,直接上干货! Kudu安装前的建议说明(博主推荐) 这是安装Kudu的另一种方法 Kudu安装(官网推荐的步骤)(installing Kudu using parcels or packag ...

  10. CSS选择器笔记,element element和element > element 的区别

    看官方解释 element element  例子: div p 官方解释:div内部所有的p元素 就是说 只要p在div内部.如果 p在span内部,span在div内部,p也算在div内部 < ...