Java 链表以及遍历//进程间的通信

链表

但需要动态地减少或添加数据项时,可以使用链表这种数据结构
Java提供的链表通常都是双链表

LinkedList泛型类

LinkedList类创建的对象称为链表对象

LinkedList<String> mylist = new LinkedList<String>();

使用add()方法向链表对象添加结点

mylist.add("你好");
mylist.add("我好");

LinkedList泛型类的常用方法

  • public boolean add(E element) //向链表末尾添加结点
  • public void add(int index, E element) //向链表的指定位置添加一个新的结点,中的数据是参数element指定的数据
  • public yoid clear() //删除链表的所有结点,使当前链表成空链表。
  • public E remove(int index) //删除指定位置上的结点。
  • public boolean remove(E element) //删除首次出现含有数据lement的结点。
  • public E get(int index) //得到链表中指定位置处结点中的数据。
  • public int indexOf(E element) //返回含有数据创ement的结点在链表中首次出置,如果链表中无此结点则返回-1。
  • public int lastIndexOf(E element) //返回含有数据element的结点在链表中最!的位置,如果链表中无此结点则返回-1。
  • public E set(int index,E element) //将当前链表index位置结点中的数据替换element指定的数据,并返回被替换的数据。
  • public int size() //返回链表的长度,即结点的个数
  • public boolean contains(Object element) //判断链表结点中是否有结点含 element。

遍历链表

Java集合框架为各种数据结构的集合都提供了迭代器
由于链表的存储结构不是顺序结构,因此链表调用get()方法的速度比顺序存储数据结构的集合(ArrayList)要慢

所以链表对象可以使用iterator()方法获取一个Iterator对象,该对象就是针对当前链表的滴迭代器

例子

import java.util.Iterator;
import java.util.LinkedList;

public class Example13_3 {
    public static void main(String[] args) {
        LinkedList<String> mylist = new LinkedList<String>();
        for (int i = 0; i <=100000 ; i++) {
            mylist.add("你好"+i); //增加100000个结点
        }
        Iterator<String> iterator = mylist.iterator();  //获取链表的迭代器,注意迭代器要和相应的链表类型相同
        long StarTime = System.currentTimeMillis(); //获取系统当前时间
        while (iterator.hasNext()){
            String str = iterator.next();   //
        }
        long EndTime = System.currentTimeMillis();
        System.out.println("使用迭代器的时间" + (EndTime-StarTime) + "毫秒");
        StarTime = System.currentTimeMillis(); //获取系统当前时间
        for (int i = 0; i <mylist.size() ; i++) {
            String str = mylist.get(i);
        }
        EndTime = System.currentTimeMillis();
        System.out.println("使用get方法遍历的时间" + (EndTime-StarTime) + "毫秒");
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_13.Part_2.Example13_3
使用迭代器的时间2毫秒
使用get方法遍历的时间5926毫秒

进程已结束,退出代码 0

需要注意的是

Java提供了顺序结构的动态数组表ArrayLiat,ArrayList类的很多方法与LinkedListL类似,二者的本质区别就是一个使用顺序结构,一个使用链式结构

进程间的通信

进程通信是指各个进程交换信息的过程

  • 同步与互斥 //同步时合作进程间的直接制约问题,互斥是申请临界资源进程间的间接制约问题
    1.进程间的同步
    2.进程间的互斥 //各进程可以共享各类资源,但有些资源却一次只能供一个进程使用
    3.临界区管理原则 //有空则进 无空则等 有限等待 让权等待

  • 信号量机制
    1.整形信号量与P操作和V操作 //P表示申请一个资源 //V表示释放一个资源
    2.利用P操作和V操作实现进程的互斥

  • 高级通信原语
    由于PV操作属于低级通信方式 //编程难度大 //效率低
    为了提高通信效率,减轻程序的复杂度,系统引入了高级通信方式
    1.共享存储模式
    2.消息传递模式
    3.管道通信

CET4P181

  • aluminium
  • pine
  • circuit
  • hence
  • reserve
  • lens
  • opening
  • depart
  • frequent
  • sigh
  • acid
  • violence
  • hen
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值