博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IO体系、集合体系、多线程、jdbc
阅读量:5290 次
发布时间:2019-06-14

本文共 3571 字,大约阅读时间需要 11 分钟。

 

存储方式:1.顺序结构 2.链式存储

 

1.数据的存储的“容器”:

  ①数组 int[] arr = new int[10]

  ②集合

 

 

Collection:用来存储一个一个的数据

  |-----Set:存储无序的、不可重复的数据--相当于高中的"集合"--“哈希算法”

    |----HashSet:主要的实现类

      |----LinkedHashSet:对于频繁的遍历,效率高

    |----TreeSet:可以按照添加的元素的指定属性进行排序遍历(自然排序Comparable(compareTo(Object obj))&定制排序Comparator(compare(Obejct obj1,Object obj2)))

  |-----List:存储有序的、可以重复的数据--相当于"动态"数组

    |----ArrayList:主要实现类,线程不安全的

    |----LinkedList:对于频繁的插入、删除操作,效率高于ArrayList

    |----Vector:古老的实现类,线程安全的

 

 

 

Map:用来存储一对一对的数据(key-value)

  |----HashMap

    |----LinkedHashMap

  |----TreeMap  

  |----Hashtable

    |----Properties

 

//原则:添加自定义类的对象到Set中时,需要自定义对象所在的类重写:equals()且hashCode();

 

@Test    public void test1() throws Exception {        RandomAccessFile raf = new RandomAccessFile(new File("hello.txt"), "rw");    //        raf.seek(7);//        raf.write("xyz".getBytes());//        //        raf.close();        //1.        raf.seek(7);        StringBuffer sb = new StringBuffer();        byte[] b = new byte[20];        int len;        while((len = raf.read(b)) != -1){            String str = new String(b,0,len);            sb.append(str);        }        //2.        raf.seek(7);        raf.write("xyz".getBytes());        raf.write(sb.toString().getBytes());                raf.close();    }

 

class Clerk{
//店员 int product; public synchronized void consumeProduct(){
//消费产品 if(product <= 0){ try { wait(); } catch (InterruptedException e) {
e.printStackTrace(); } }else{ System.out.println(Thread.currentThread().getName() + ":消费了第" + product + "个产品"); product--; notifyAll(); } } public synchronized void addProduct(){
//生产产品 if(product >= 20){ try { wait(); } catch (InterruptedException e) {
e.printStackTrace(); } }else{ product++; System.out.println(Thread.currentThread().getName() + ":生产了第" + product + "个产品"); notifyAll(); } }}

消费者:

class Comsumer implements Runnable{
//消费者 Clerk clerk; public Comsumer(Clerk clerk){ this.clerk = clerk; } @Override public void run() { System.out.println("消费者开始消费产品"); while(true){ try { Thread.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } clerk.consumeProduct(); } }}

生产者:

class Productor implements Runnable{
//生产者 Clerk clerk; public Productor(Clerk clerk){ this.clerk = clerk; } @Override public void run() { System.out.println("生产者开始生产产品"); while(true){ try { Thread.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } clerk.addProduct(); } }}

测试:

public class TestProduct {    public static void main(String[] args) {        Clerk clerk = new Clerk();                Productor p1 = new Productor(clerk);        Thread t1 = new Thread(p1);//创建了一个生产者        Thread t2 = new Thread(p1);                Comsumer c1 = new Comsumer(clerk);        Thread tt1 = new Thread(c1);//创建了一个消费者                t1.start();        t2.start();        tt1.start();            }}

 

转载于:https://www.cnblogs.com/lzb0803/p/9201365.html

你可能感兴趣的文章
图论专题考试2 爆零祭
查看>>
21.centos7基础学习与积累-007-远程连接
查看>>
获取当前日期和随机数
查看>>
透视ERP会计科目 (转自SAP屠夫的博客)
查看>>
0049 MyBatis关联映射--一对一关系
查看>>
解决ultravnc在win2008 R2下CTRL+ALT+DELETEA组合键发送失败的问题
查看>>
Ceph相关
查看>>
大小写转换
查看>>
AJAX
查看>>
maven项目启动报错ContainerBase.addChild: start
查看>>
笔记2
查看>>
HCNP学习笔记之ICMP协议与ping原理以及用Python实现ping
查看>>
字符函数
查看>>
身份证号码验证 类
查看>>
oracle listagg函数、lag函数、lead函数 实例
查看>>
mongodb测试类
查看>>
jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
查看>>
ExtAspNet v3.1.8 发布了
查看>>
(分享)C# 绘制统计图(柱状图, 折线图, 扇形图)
查看>>
html学习笔记二
查看>>