存储方式: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(); }}