JAVA学习————Day29

LinkedList和Set

1. LinkedList
1.1 LinkedList概述

底层存储数据是一个双向链表结构
自行车链子 就是一个生活中链表结构,环环相扣,替换,拆除非常方便
在这里插入图片描述
在这里插入图片描述

1.2 LinkedList需要了解的方法

LinkedList使用的方法都是从List接口实现而来的方法,需要了解的是LinkedList特有方法:
boolean addFirst(E e);
在当前链表开始位置加元素
boolean addLast(E e);
在当前链表末尾添加元素
E getFirst();
获取第一个Node节点元素数据
E getLast();
获取末尾Node节点元素数据
E removeFirst();2
删除头节点
E removeLast();
删除末尾节点

1.3 LinkedLast方法演示
package com.qfedu.a_linkedlist;

import java.util.LinkedList;

/**
 * LinkedList常用方法
 * @author Anonymous
 *
 */
public class Demo1 {
	public static void main(String[] args) {
		LinkedList<String> list = new LinkedList<String>();
		
		list.add("汉堡王");
		list.add("KFC");
		list.add("德克士");
		list.add("麦当劳");
		list.add("华莱士");
		
		System.out.println(list);
		
		list.addFirst("乡村汉堡");
		
		System.out.println(list);
		
		list.addLast("正新鸡排");
		
		System.out.println(list);
		
		String last = list.removeLast();
		System.out.println(last);
		System.out.println(list);
		
		String first = list.removeFirst();
		System.out.println(first);
		System.out.println(list);
		
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
	}
}
2. Set集合
2.1 Set接口概述

Set接口数据存储
1. 无序
2. 不可重复

无序
添加顺序和存储不一致!!!
不可重复
Set存储的元素不允许出现重复情况

HashSet
底层存储数据的结构是哈希表
TreeSet
底层存储数据的结构是[平衡二叉树]

Set集合使用的方法都是Collection接口中的方法,没有特殊方法
但是Set接口中两个重要的实现类HashSet和TreeSet存储过程中,需要依赖于其他方法的实现和要求。
2.2 HashSet【重点】
2.2.1 HashSet概述

HashSet底层存储数据的结构是一个哈希表是一个表结构
表结构,我们可以认为是Excel表格
存在坐标关系 ,每一个单元格坐标唯一!!!

HashSet存储过程中,需要涉及到添加元素的hashCode方法,有可能也会涉及到equals方法。
equals方法情况需要我们避免。

2.2.2 HashSet代码演示
package com.qfedu.b_set;

import java.util.HashSet;

public class Demo1 {
	public static void main(String[] args) {
		HashSet<Person> set = new HashSet<Person>();
		
		Person p1 = new Person(1, "骚磊", 16);
		Person p2 = new Person(2, "骚杰", 66);
		Person p3 = new Person(3, "茂林", 15);
		Person p4 = new Person(4, "大熊", 45);
		Person p5 = new Person(5, "康爷", 14);
		Person p6 = new Person(6, "宝哥", 60);
		Person p7 = new Person(6, "宝哥", 60);
		
		/*
		 * Set集合中添加顺序和存储顺序不一致
		 * 415362
		 * 
		 * Set集合当中元素不可以重复
		 */
		set.add(p6);
		set.add(p5);
		set.add(p2);
		set.add(p4);
		set.add(p3);
		set.add(p1);
		set.add(p7);
		
		System.out.println(set);
		System.out.println(set.size());
	}
}
2.2.3 hashCode和equals方法角色【重点】

发现:
1. 元素添加多少个,hashCode方法执行多少次
2. 添加相同元素,会执行equals方法
在这里插入图片描述

2.3 TreeSet
2.3.1 什么是树形结构

在这里插入图片描述

2.3.2 TreeSet代码演示
package com.qfedu.b_set;

import java.util.TreeSet;

/*
 * TreeSet存储数据演示
 */
public class Demo2 {
	public static void main(String[] args) {
		TreeSet<String> set1 = new TreeSet<String>();
		
		set1.add("我");
		set1.add("你");
		set1.add("他");
		set1.add("嘿嘿嘿");
		set1.add("哇呜");
		
		System.out.println(set1);
		
		TreeSet<Integer> set2 = new TreeSet<Integer>();
		
		set2.add(1);
		set2.add(3);
		set2.add(2);
		set2.add(6);
		set2.add(5);
		set2.add(7);
		System.out.println(set2);
		
		TreeSet<Person> personSet = new TreeSet<Person>();
		
		/*
		 * Person类对象存储失败,因为Person类没有对应的比较方式
		 * 而TreeSet每一个存储的元素都需要有对应的比较方式或者自然顺序
		 */
		personSet.add(new Person(1, "骚磊", 16));
		personSet.add(new Person(2, "骚杰", 66));
		personSet.add(new Person(3, "锤石", 26));
		personSet.add(new Person(4, "维鲁斯", 36));
		personSet.add(new Person(5, "巴德", 56));
		personSet.add(new Person(6, "马尔扎哈", 76));
	}
}
2.2.3 比较方式完成

TreeSet集合存储元素需要自然顺序或者【比较方式】,Person类没有比较方式
1. Person类遵从Comparable接口,实现compareTo方法
public int compareTo(T t);
2. 给TreeSet添加插件,比较方式插件,在创建TreeSet对象过程中,传入一个
Comparator接口实现类对象,实现compare方法
public int compare(T o1, T o2);

2.3 Comparable接口

/*

  • 该方法是Person类遵从Comparable接口实现的方法,因为需要进行大小,比较的
  • 内容明确是Person类型。那么在遵从接口时,直接约束泛型对应的具体数据类型为Person类型
  • 该方法返回值类型为int类型,
  •  负数  前者数据小于后者数据 
    
  •  正数  前者数据大于后者数据  
    
  •  0  两个元素大小一致,后者无法添加
    
  • 该方法会在当前Person类对象需要进行排序操作时,自行调用。
  • 比如 TreeSet结构添加过程中,就调用compareTo方法进行比较判断
    */
    @Override
    public int compareTo(Person o) {
    System.out.println(this.name + “compareTo方法被调用” + o.name);
    return o.age- this.age;
    }
2.4 Comparator接口
package com.qfedu.c_compare;

import java.util.Comparator;

import com.qfedu.b_set.Person;

/*
 * 自定义比较器类,遵从Comparator接口,实现compare方法
 * 
 * 这里完成的是一个针对Person类型的比较器,并不是存在与Person类内
 * Comparator Java中提供的比较器接口
 * 
 * 【核心】
 * 		是o1.getAge() - o2.getAge();
 * 		只不过在一个方法compare内
 * 		方法又在一个类中
 * 		类想要执行该方法,需要一个类对象
 * 
 */
public class PersonCompare implements Comparator<Person> {
	@Override
	public int compare(Person o1, Person o2) {
		System.out.println("Comparator的compare方法");
		return o1.getAge() - o2.getAge();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值