Java链表

Java的链表已经被库程序员做好了封装,不会再像面向过程语言那样再重建。
Java中提供了linkedList类,从此一切链表的操作都会很简单。

package linkedList;

import java.util.Iterator;//迭代器
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

public class LinkedListTest {

    public static void main(String[] args){
        List<String> a = new LinkedList<>();
        a.add("Amy");
        a.add("Carl");
        a.add("Erica");

        List<String> b = new LinkedList<>();
        b.add("Bob");
        b.add("Doug");
        b.add("Frances");
        b.add("Gloria");

        ListIterator<String> aIter = a.listIterator();
        Iterator<String> bIter = b.iterator();

        //merge the words from b into a
        while(bIter.hasNext()){
            if(aIter.hasNext())
                aIter.next();
            aIter.add(bIter.next());
        }

        System.out.println(a);
        //remove every second word from b
        bIter=b.iterator();
        while(bIter.hasNext()){
            bIter.next();
            if(bIter.hasNext()){
                bIter.next();
                bIter.remove();
            }
        }

        System.out.println(b);
        ((LinkedList<String>) a).removeAll(b);
        System.out.println(a);
    }
}
解释:
1.ListIterator<E> listIterator() 返回一个列表迭代器,以便用来访问列表的元素
2.void add(int i, E element) 在给定位置添加一个元素
3.E remove(int i)删除给定位置元素比你高返回这个元素
4.hasNext()指的是检测下一个元素是否为空,Next()是指将迭代器往下迭代一次

但是Java的链表类有一个缺点,当你需要搜索的时候,只能从头开始遍历,无法直接寻找到你所要找的位置。但散列表很好的解决了这一问题,散列表为每个对象计算一个整数,称为散列码。其缺点就是无法控制元素出现的次序。

以下是散列表的实现方法:

package set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

public class SetTree {
    public static void main(String[] args){
        Set<String> words = new HashSet<>();//hashset implements set
        long totalTime = 0;

        try (Scanner in = new Scanner(System.in))
        {
            while(in.hasNext()){
                String word = in.next();
                long callTime = System.currentTimeMillis();
                words.add(word);
                callTime = System.currentTimeMillis() - callTime;
                totalTime += callTime;
            }
        }

        Iterator<String> iter = words.iterator();
        for (int i = 1; i <= 20 && iter.hasNext(); i++)
            System.out.println(iter.next());
        System.out.println("...");
        System.out.println(words.size() + "distinct words," +totalTime+ "millsseconds.");
    }
}

解释:
1.Hashset() 构造一个空散列表

TreeSet 树集与散列集非常相似,不过相对于散列集更加有所改进:树集是一个有序集合。

迭代器总是以排好的顺序访问每个元素,但将每一个元素添加到树集中要比散列表慢。

以下是示例:

SortedSet<String> sorter = new TreeSet<>();

sorter.add("Bob");

sorter.add("Amy");

sorter.add("Carl");

for(String s: sorter) System.println(s);

此处的排序是用树来完成的。

 

此外,还有一个优先级队列,这其中的元素可以以任意的顺序插入,但却总是按排序的顺序进行检索。无论何时调用方法都是从队列中的最小元素入手。

 

 

后续持续改进......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值