1/19笔记

1.5 List

1.5.1 ArrayList 在上一篇

1.5.2 LinkedList

1.5.2.1 基本使用

LinkedList:底层是一个双向链表,因为不是连续存储

只是能够找到下一个元素的地址而已,所以进行添加和删除效率较高

但是查询效率较低,因为只能从第一个挨个找

LinkedList list = new LinkedList();创建对象

list.add(1);list.add(11);list.add(111);添加

list.size();个数

list.isEmpty();是否为空

list.remove(0);根据下标删除

list.remove(new Integer(11));根据数据删除

list.clear();清空

list.set(2,1111);更改

list.get(2);获取

for(Object object:list);遍历

1.5.2.2 底层实现

1.5.2.2.1 节点类

链表由节点构成,因为是双向链表,所以节点中有三个属性

1 )上一个节点对象  节点类型

2 )保存的数据 Object

3 )下一个节点对象  节点类型

private static class Node<E>{        是LinkedList类中的一个内部类

        E item;        要保存的数据 E可以理解为Object

        Node<E> prev;        上一个节点对象

        Node<E> next;        下一个节点对象

        Node(Node<E> prev,E element,Node<E> next){        有参构造方法

        this.item = element;

        this.prev = prev;

        this next = next;

        }

}

1.5.2.2.2 LinkedList类

为了首尾添加效率更高,在LinkedList类中保存了首节点和尾结点

transient int size = 0;        已有元素个数

transient Node<E> first;        首节点,也就是第一个节点

transient Node<E> last;        尾节点,也就是最后一个节点

1.5.2.2.3 添加-add

1.5.2.2.4 获取-get

1.6 Set

Set特性:无序 不可重复(*无序指添加和取出顺序不保证一致)

HashSet:底层是散列表

TreeSet:底层是红黑树,添加的元素必须按照一定的格式进行排序

1.6.1 TreeSet

排序规则

数字:默认从小到大

字符串:按每位ASCLL码进行排序

        a,aa,aadddd,acadas,caa,d   

        [1, 10, 2, 3, 4, 5, 6, 7, 8, 9]

日期:自然日期 昨天今天明天

因为TreeSet必须保证元素有序,也就意味着元素类型必须统一

不统一就没有可比性,就不能排序

不可重复,如果重复则不添加

根据内容删除,不能根据索引,因为没有索引

1.6.2 comparable

使用TreeSet的时候,元素必须实现了Comparable接口,因为在添加的时候,会自动调用该接口的compareTo方法进行比较
添加字符串,数字,日期的时候,会进行自动排序,是因为Integer,String,Date都实现了该接口和该方法
如果我们要存储自定类型的时候,就需要让该类去实现对应的接口和方法才能进行存储

因为自己定义的类没有实现对应的Comparable接口,所以在使用TreeSet的时候,会报错

{该方法 返回 0 说明重复,不添加
返回 大于0的值 说明要添加的元素比集合中的大,就往后放
返回 小于0的值 说明要添加的元素比集合中的元素小,就往前放}

1.6.3 comparator

Comparator也是比较器类Comparable也是做比较的 , 如果这两个同时存在,则Comparator优先级高
Comparable : 如果treeSet中保存我们自己定义的类型的时候,使用Comparable
Comparator : 如果treeSet中保存的不是我们写的类型的时候,就要使用Comparator来指定排序规则
比如 Integer 默认是升序排序,假如我们需要降序排序,我们只能使用 Comparator,因为我们不可能去更改Integer的源码
但此时 Integer中是有Comparable接口的实现的,等于两个比较都存在,但是Comparator优先级高,
所以会按照我们定义的规则进行排序
开闭原则 : 对修改关闭,对扩展开发

1.6.4 List排序

该方法会调用对象的Comparable中的compareTo方法或者是Comparator接口中的方法
因为Integer中有compareTo方法,而且是升序,所以才可以使用sort方法
比如想要降序可以使用sort方法重载
Collections.sort(list);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值