java day027 集合之LinkedList与Set

java day027 LinkedList与Set

1.LinkedList概述

LinkedList的底层存储数据结构是一个双向链表结构

2.LinkedList需要了解的方法

boolean addFirst(E e);

首插法,在表头添加元素

boolean addLast(E e);

尾插法,在表尾添加元素

E getFirst();

获取第一个节点Node数据

E getLast();

获取最后一个节点Node数据

E removeFirst();

删除第一个节点

E removeLast();

删除最后一个节点

LInkedList示例

import java.util.LinkedList;

public class TestLinkedList {
	public static void main(String[] args) {
		
		LinkedList<String> a1 = new LinkedList<String>();
		
		a1.add("哈哈");
		a1.add("嘿嘿");
		a1.add("嘻嘻");
		a1.add("诶诶");
		a1.add("呸呸");
		System.out.println(a1);
		
		a1.addFirst("哦哦");
		System.out.println(a1);
		
		a1.addLast("哦哦");
		System.out.println(a1);
		
		System.out.println(a1.removeFirst());
		System.out.println(a1.removeLast());
		
		System.out.println(a1.getFirst());
		System.out.println(a1.getLast());
		
	}
}
/*
输出结果:
[哈哈, 嘿嘿, 嘻嘻, 诶诶, 呸呸]
[哦哦, 哈哈, 嘿嘿, 嘻嘻, 诶诶, 呸呸]
[哦哦, 哈哈, 嘿嘿, 嘻嘻, 诶诶, 呸呸, 哦哦]
哦哦
哦哦
哈哈
呸呸
*/

3.Set集合概述

Set集合存储:

  1. 无序

    添加的顺序与存储不一致!

  2. 不可重复

    Set存储的数据不允许出现重复的情况!

HashSet

底层存储数据结构为哈希表

TreeSet

底层存储数据为平衡二叉树

HashSet概述

HashSet存储过程中,需要涉及到添加元素的hashCode方法,有可能也会涉及到equals方法

equals方法情况需要我们避免

代码演示:

import java.util.HashSet;

public class TestHashSet {
	public static void main(String[] args) {
		
		HashSet<String> a1 = new HashSet<String>();
		
		a1.add("哈哈");
		a1.add("嘿嘿");
		a1.add("嘻嘻");
		a1.add("诶诶");
		a1.add("呸呸");
		System.out.println(a1);
		
	
		a1.add("呸呸");
		System.out.println(a1.size());
		System.out.println(a1);
	}
}
/*
输出结果:
[诶诶, 哈哈, 嘿嘿, 嘻嘻, 呸呸]
5
[诶诶, 哈哈, 嘿嘿, 嘻嘻, 呸呸]
*/

hashCode和equals方法角色

  1. 元素添加多少个,hashCode方法执行多少次
  2. 添加相同元素时,会执行equals方法

TreeSet代码演示

import java.util.TreeSet;

public class TestTreeSet {
	public static void main(String[] args) {
		
		TreeSet<Integer> a1 = new TreeSet<Integer>();
		
		a1.add(24);
		a1.add(30);
		a1.add(46);
		a1.add(100);
		a1.add(10);
		a1.add(11);
		
		System.out.println(a1);
	}
}
/*
输出结果:
[10, 11, 24, 30, 46, 100]
*/

注意:

放入TreeSet集合中的对象必须要有自然顺序或者比较方式,若没有会报错

比较方式完成:

  1. 类遵从Comparable接口,实现compareTo方法

    public int compareTo(T t);

  2. 给TreeSet添加插件,比较方式插件,在创建TreeSet对象过程中传入一个

    ​ Comparator接口类实现对象,实现compare方法

    public int compare(T o1, T o2);

示例:

package com.qfedu.study.Linkedlistandset;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * Animal类实现Comparable接口,在类内自定义比较方式
 * @author Arkay
 *
 */
class Animal implements Comparable<Animal> {
	
	int age;
	String name;
	
	public Animal() {}
	
	public Animal(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
		
	@Override
	public String toString() {
		return "Animal [age=" + age + ", name=" + name + "]";
	}

	@Override
	public int compareTo(Animal o) {
		return o.age - this.age;
	}
	
}

/**
 * 自定义个Animal类比较方式的插件
 * @author Arkay
 *
 */
class AnimalCompare implements Comparator<Animal> {

	@Override
	public int compare(Animal o1, Animal o2) {
		return o1.age - o2.age;
	}
	
}

public class TestTreeSet {
	public static void main(String[] args) {
		
		TreeSet<Animal> a1 = new TreeSet<Animal>();
		
		a1.add(new Animal(2, "老虎"));
		a1.add(new Animal(5, "狮子"));
		a1.add(new Animal(8, "大象"));
	
		System.out.println(a1);
		
		TreeSet<Animal> a2 = new TreeSet<Animal>(new AnimalCompare());
		
		a2.add(new Animal(1, "猴子"));
		a2.add(new Animal(9, "豹子"));
		a2.add(new Animal(3, "花猫"));
		
		System.out.println(a2);
		
	}
}
/*
输出结果:
[Animal [age=8, name=大象], Animal [age=5, name=狮子], Animal [age=2, name=老虎]]
[Animal [age=1, name=猴子], Animal [age=3, name=花猫], Animal [age=9, name=豹子]]
*/

你可能感兴趣的:(入门,技术支持,新手)