1. LinkedList
1.1 概述
LinkedList:底层是一个双向链表,因为不是连续存储
只是能够找到下一个元素的地址而已,所以进行添加和删除操作效率较高
但是查询效率较低,因为只能从第一个挨个找
1.2基本使用
list.add(值); 添加
System.out.println(list.size()); 元素个数
System.out.println(list.isEmpty()); 是否为空
list.remove(index); 根据下标删除
list.remove(new integer(值)); 根据数据删除
list.clear(); 清空
list.set(index,值); 更改
list.get(index); 获取
for(Object object:list) 遍历
1.3底层实现
1.3.1节点类
链表由节点构成,因为是双向链表,所以节点中有三个属性
1 保存的数据 Object
2 下一个节点对象 节点类型
3 上一个节点对象 节点类型
1.4 Set和排序
Set特性:无序且不可重复,无序指的是添加顺序和取出顺序不保证一致
HashSet:底层是散列表
TreeSet:底层是红黑术,添加的元素必须按照一定的格式进行排序
TreeSet:元素类型必须统一
不可重复,如果重复不在添加
根据内容删除,不能根据索引删除,因为没有索引
数字:默认从小到大
set.add(1);
set.add(5);
set.add(3);
set.add(2);
set.add(4);
set.add(5);
System.out.println(set); 1 2 3 4 5
字符串:按每位ASCLL码进行排序
set.add("a");
set.add("b");
set.add("c");
set.add("asvq");
set.add("abde");
System.out.println(set); a abde asvq b c
set.add("1");
set.add("2");
set.add("3");
set.add("4");
set.add("10");
set.add("11");
set.add("21");
System.out.println(set); 1 10 11 2 21 3 4
1.5Comparable
使用TreeSet的时候,元素必须实现了Comparable接口,因为在添加的时候,会自动调用该接口的comparaTo方法进行比较
添加字符串,数字,日期的时候,会自动进行排序,是因为lnteger,String,Date都实现了该接口和该方法
如果要存储自定义类型的时候,就需要让该类去实现对应接口和方法才能进行存储
1.6 Comparator
Comparator 也是比较器类 Comparable 也是做比较的 , 如果这两个同时存在,则Comparator优先级高
Comparable : 如果treeSet中保存我们自己定义的类型的时候,使用Comparable
Comparator : 如果treeSet中保存的不是我们写的类型的时候,就要使用Comparator来指定排序规则
比如 Integer 默认是升序排序,假如我们需要降序排序,我们只能使用 Comparator,因为我们不可能去更改Integer的源码
但此时 Integer中是有Comparable接口的实现的,等于两个比较都存在,但是Comparator优先级高,
所以会按照我们定义的规则进行排序
开闭原则 : 对修改关闭,对扩展开发
1.7 List排序