(一) 知识回顾
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. kvm重新命名

    1.停止虚拟机 virsh shutdown wcltest3 2.导出虚拟机的配置文件 cd /etc/libvirt/qemu virsh dumpxml wcltest3 > vnc.xm ...

  2. Java的JsonHelper

    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <g ...

  3. 并行执行hive脚本

    ### 模板脚本存放路径(无需修改) cd /tmp/fix_data/tmp_wjj_20180322_01 ### 脚本名称 script=tmp_wjj_20180322_01 ### 开始日期 ...

  4. thinkphp模板布局

    不知道我们会不会有这样一个困惑,,每当进行一个项目时,发现页面都有好多重复的地方,假如我们每个页面都写,不仅降低的代码的运行效率 而且还不利于后期维护!TP中的模板布局就解决了这一难题! 我们就以Ad ...

  5. ubuntu 启动 ssh 服务

    $ sudo service ssh start $ sudo /etc/init.d/ssh start 重启 $ sudo /etc/init.d/ssh restart $ sudo servi ...

  6. nginx —— 理解nginx_upstream_jvm_route模块解决tomcat多节点session不一致问题

    这种方式不需要修改web工程只需要对nginx下载nginx_upstream_jvm_route插件,修改tomcat和nginx配置,就能解决session问题.由于这种方式不会把session存 ...

  7. Django-5.1 模型层 单表操作

    7.1 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开 ...

  8. android 闹钟设置问题

    Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...

  9. Oulipo(Hash入门第一题 Hash函数学习)

    Hash,一般翻译做散列.杂凑,或音译为哈希,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是,散列值的 ...

  10. iTween 不能两个游戏对象同时用一个Hashtable

    两个游戏对象,点击其中一个,两个对象一起旋转,再点一下,两个都旋转到原来角度. 如图:两个游戏对象不能用一个Hashtable,会出错,达不到两个一起转的效果. 每个对象要有自己的Hashtable来 ...