欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

集合框架(2)——LinkedList(链表)

时间:2023-08-05
一、 linkedList(链表)

每个元素有几个属性,存储值、存储上一个元素的引用(地址)、存储下一个元素的引用(地址)

linkedList是双向链表的数据结构

linkedList源码实现

1.定义Node内部类

//定义一个节点类 (内部类)class Node{ private Node prev;//左节点,存储上一个元素的地址 private Node next;//右节点,存储下一个元素的地址 private Object data;//数据域,存储值 public Node(Node prev, Node next, Object data) { super(); this.prev = prev; this.next = next; this.data = data; }}

2、定义三个属性 ,第一个节点引用;最后一个节点的引用;长度

private Node first;private Node last;private int size;

3、实现size方法和get方法

public int size() { return size;}

 方式一:

public Object get(int index) { if(index<0 || index>size-1) { throw new IndexOutOfBoundsException(); } //判断index 是靠前还是靠后 if(index < (size>>1)) { //右移一位相当于除二操作 //如果靠前 Node n = first; int count = 0; //从first开始遍历 循环中不循环first for(n = first;n.next!=null;n=n.next) { if(++count==index) { break; } } return n; }else { //如果靠后 Node n = last; int count = size-1; for(n = last;n.prev!=null;n=n.prev) { if(--count==index) { break; } } return n; }}

 方式二:

public Object get(int index) { if(index<0 || index>size-1) { throw new IndexOutOfBoundsException(); } //判断index 是靠前还是靠后 if(index<(size>>1)) { Node n = first; for(int i = 0;iindex;i--) { n = n.prev; } return n.data; } }

二、数据结构:

计算机存储数据、组织数据的方式

1.数组:是线性结构的数据结构,存储的元素在空间上是连续的,遍历元素效率高

2.链表:分为单链表和双链表,插入和删除数据效率高

3.树:查找元素效率高

4.栈结构:存储的元素是 先进后出型的

5.队列:头只能添加元素,从尾获得元素(先进的元素是尾,后进的元素是头),是先进先出型

6.哈希:

三、linkedList的栈功能

了解Stack类

import java.util.Stack;public class TestStack { public static void main(String[] args) { Stack stack = new Stack(); stack.push("a"); stack.push("b"); stack.push("c"); stack.push("d"); stack.push("e"); while(!stack.empty()) { //获取栈中的元素,先进后出 System.out.print(stack.pop()+" ");//e d c b a } }}

使用linkedList的栈功能

public static void main(String[] args) { linkedList list = new linkedList(); list.push("a"); list.push("b"); list.push("c"); list.push("d"); list.push("e"); while(list.size()!=0) { System.out.print(list.pop()+" ");// e d c b a } }

也可以二次封装为一个纯栈

public class MyStack { private linkedList list; public MyStack() { list = new linkedList(); } public void push(Object obj) { list.push(obj); } public Object pop() { return list.pop(); } public boolean isEmpty() { return list.size() == 0 ? true : false; }}

四、linkedList的队列功能

import java.util.linkedList;public class TestlinkedList { public static void main(String[] args) { linkedList list = new linkedList(); list.offer("a"); list.offer("b"); list.offer("c"); list.offer("d"); list.offer("e"); while(list.size()!=0) { //先进先出 System.out.print(list.poll()+" ");//a b c d e } }}

ArrayList、linkedList、Vector的区别

ArrayList:是基于数组的集合,遍历时效率高,扩容是按50%

linkedList: 是基于双链表的集合,插入、删除时效率高

Vector:是线程安全的,效率低,扩容是按100%

五、Collections

Collection和Collections一个是接口,一个是类

Collection是集合框架的父接口

Collections是为集合框架提供服务的工具类,所有的方法都是静态的,提供的功能方法:

折半查找法、集合的线程安全、拷贝、排序等

六、Comparable

可排序的接口,一个类实现了该接口,要实现compareTo方法,描述比较的过程,一个类的对象有默认的比较规 则,要实现这个接口

public class Person implements Comparable{ private String sfz; private String name; private int age; public String getSfz() { return sfz; } public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public void setSfz(String sfz) { this.sfz = sfz; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Person(String sfz, String name, int age) { super(); this.sfz = sfz; this.name = name; this.age = age; } @Override public boolean equals(Object obj) { if(this==obj) return true; if(obj instanceof Person) { Person p = (Person)obj; if(this.sfz.equals(p.sfz)) return true; } return false; } @Override public String toString() { return name; } @Override public int compareTo(Object o) { Person p = (Person)o; if(this.age>p.age) { return 1; } return -1; }}

七、Comparator(比较器)

比较器,一个类实现该接口,这个类就是一个比较器类了,将自定义的比较规则定义在比较器中

public class StringLengthComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { String s1 = (String)o1; String s2 = (String)o2; if(s1.length()>s2.length()) return 1; return -1; }}

List list1 = new ArrayList();Collections.addAll(list1, "aadfss","cbdaaaf","acbc","acaad");Collections.sort(list1, new StringLengthComparator());System.out.println(list1);

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。