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;
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.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;
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>();
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.3.3 比较方式完成
TreeSet集合存储元素需要自然顺序或者【比较方式】,Person类没有比较方式
1. Person类遵从Comparable<T>接口,实现compareTo方法
public int compareTo(T t);
2. 给TreeSet添加插件,比较方式插件,在创建TreeSet对象过程中,传入一个
Comparator<T>接口实现类对象,实现compare方法
public int compare(T o1, T o2);
Comparable接口
@Override
public int compareTo(Person o) {
System.out.println(this.name + "compareTo方法被调用" + o.name);
return o.age- this.age;
}
```java
package com.qfedu.c_compare;
import java.util.Comparator;
import com.qfedu.b_set.Person;
public class PersonCompare implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
System.out.println("Comparator的compare方法");
return o1.getAge() - o2.getAge();
}
Comparable接口
package com.qfedu.c_compare;
import java.util.Comparator;
import com.qfedu.b_set.Person;
public class PersonCompare implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
System.out.println("Comparator的compare方法");
return o1.getAge() - o2.getAge();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)