第十四节ArrayList 和LinkedList

一,今天的内容
1.ArrayList 底层是一个数组–可变长度的数组
数据类型…变量名 可变长度的数组声明(类型确定 个数不确定)
ArrayList 特点:
缺点:在增删数据时 有大量数据的移动 执行效率较低
优点:但是在查改数据时 速度很快 执行效率高
2.LinkedList–数据结构–链表结构

优点:增删数据时不需要移动其他元素 执行效率相对要高
缺点:查改数据时,效率要低
特点:1.增删数据时不需要移动元素,执行效率相对要高
2.查改数据时,执行效率较低(因为在查找数据时 必须通过第一个数据,以此查找到关联的位置为止)
两个方向都能操作(堆和栈是一个方向)
使用步骤:1.实例化LInkedList 对象
2.添加数据 add()
3.打印内容

addFirst()在最前面添加数据
addLast()在最后面添加数据
element()获取但不删除第一个元素
peek() 获取第一个元素
获取并移除第一个元素和最后一个元素
poll() pollFirst() pollLast()
pop()弹栈 将栈中最上面的元素移除
push()压栈 添加数据到栈顶
3.数据结构
数组:连续存储
栈:先进后出 后进先出 last in first out —LIFO
代表方法 pop push
队列:先进先出 first in first out —–FifO
代表方法 poll offer

Collection 知道
List 接口 重点
Deque 接口 了解 (双端)为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
ArrayList 实现类 重点 线程不同步
LinkedList实现类 知道
Vector 实现类 了解 执行效率非常低(线程同步)

Set
1.不可以有重复的元素
2.无序的–存入的顺序
自定义的实体类,在集合中体现:
1.自定义的实体类,不排除重复
2.如果排除重复,则需要引用类型重写父类方法hashCode()和equals()
自定义实体类,在set集合中排除重复步骤:
1.当集合中添加数据的时候,会去调用hashCode(),获取hashCode码
判断是否一致 如果不一致,则认为是不同的内容添加到集合当中,则不会调用
equals()
2.如果hashCode码一致会调用equals方法,拿出属性值依次比较,如果完全相同返回
true ,否则返回false
public int hashCode() {
// 返回的是所有属性的hashCode相加的和
System.out.println(“hashCode() == ” + name);
int result = 0;
if(name!=null)
{
result = name.hashCode() + age;
}
//姓名 年龄
//张三 20
//李四 21
//如果有以下情况: 则需要进行第二轮比较, 判断内容是否相等
//2 20
//20 2
return result;
}
//在hashCode() 方法后, 二次判断
//Object obj 参数对象
@Override
public boolean equals(Object obj) {
if(obj == null)
{
return false;
}
if(this == obj) // 在堆内存中, 地址是同一个
{
return true;
}
if(obj instanceof Person)
{
Person person = (Person) obj;
System.out.println(“判断重复的用户 , 名字为 == ” + person.getName());
if(this.name.equals(person.getName()) && this.age == person.getAge())
{
return true;
}
}
return false;
}

TreeSet
利用二叉树的结构
顺序与存入的顺序无关 无序的 但是它是一个可以排序的
排序: 自然排序 定制排序
自然排序
TreeSet中添加实体类
1.让实体类,实现Comparable接口,泛型中,想要给那个类型进行排序,则在泛型中
就写那个类型
2.在实体类中,实现方法compareTo()
0: 代表相同元素,不添加到TreeSet中
非0: 则需要添加到集合中
调用者>被调用者 return 1 从小到大排列
return -1 从大到小排列
@Override
public int compareTo(Student o) {
if(this.age>o.age)
//return 1; //从小到大排列
return -1;
}else if(this.age < o.age){
//return -1;//从大到小排列
return 1;
}
return 0;
}
定制排序
1.单独创建一个类 实现Comparator接口 ——-自定义比较器
2.重写方法 compare()方法
3.在创建TreeSet对象时 通过构造方法,将创建的额外的比较器,放入到TreeSet
构造方法中
@Override
public int compare(Person o1, Person o2) {
//1, 先按年龄降序排列
if(o1.getAge() > o2.getAge())
{
return -1;
}else if(o1.getAge()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值