• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

光的色彩

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

day003-List类、Set类

                        (一) 知识回顾
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)方法进行比较时,
需要定义自己的比较器标准。举例如下:

1 Collections.sort(list1, new Comparator<Student>(){
2     @Override
3     public int compare(Student o1, Student o2) {
4             return o1.getAge() - o2.getAge();
5         }
6 });
7 
8         

 


 

posted on 2018-05-30 09:38  光的色彩  阅读(144)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3