Java笔记5

vector

vector底层是用数组实现的List,相关方法都加了同步检查,因此“线程安全,效率低”

建议:

1.需要线程安全时,用Vector。

2.不存在线程安全时,并且查找较多用ArrayList(一般使用它)。

3.不存在线程安全时,增加或删除元素较多使用LinkedList。

 

哈希表的基本结构就是“数组+链表”

hashmap 

链表的结构

Entry[]数组作为存储方式

将hashcode除以16,取余数来放入数组中,相同余数放在一起(其中一种散列方法,追求均匀分布)

 

System.out.println("hash in myHash"+(value&(length-1)));//位运算
System.out.println("hash in myHash"+(value%(length-1)));//得余数

两个值并不一定相同,但系统中debug里是以位运算为标准 分配键与值

 

HashMap与HashTable区别

HashMap:线程不安全,效率高,允许key或value为null

HashTable:线程安全,效率低,不允许Key或value为null

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class TestStoreData {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
Map<String,Object> row1=new HashMap<String,Object>();
	row1.put("id", 1001);
	row1.put("name", "张三");
	row1.put("salary", 20000);
	row1.put("入职日期", "2018.5.5");
	
	Map<String,Object> row2=new HashMap<String,Object>();
	row2.put("id", 1002);
	row2.put("name", "李四");
	row2.put("salary", 30000);
	row2.put("入职日期", "2005.5.4");
	
	Map<String,Object> row3=new HashMap<String,Object>();
	row3.put("id", 1003);
	row3.put("name", "王五");
	row3.put("salary", 40000);
	row3.put("入职日期", "2020.5.4");
	
	
	List<Map<String,Object>> table1=new ArrayList<Map<String,Object>>();
	table1.add(row1);
	table1.add(row2);
	table1.add(row3);
	
	for(Map<String,Object> row:table1){
		Set<String> keyset=row.keySet();
		for(String key:keyset){
			System.out.print(key+":"+row.get(key)+"\t");
		}
		System.out.println();
	}
	
	
	}

}

 

每一行数据使用一个javabean对象

每一个表格使用一个Map/List

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class TestScoreData2 {
public static void main(String[] args) {
	User user1=new User(1001,"张三",2000,"2018.5.5");
	User user2=new User(1002,"李四",3000,"2005.5.4");
	User user3=new User(1003,"王五",4000,"2020.5.4");
	List<User> list=new ArrayList<User>();
	list.add(user1);
	list.add(user2);
	list.add(user3);
	
	for(User u:list){
		System.out.println(u);
	}
	
	
	Map<Integer,User> map=new HashMap<Integer,User>();
	map.put(1001, user1);
	map.put(1002, user2);
	map.put(1003, user3);
	
	Set<Integer> keyset=map.keySet();
	for(Integer key:keyset){
	System.out.println(key+"--"+map.get(key));	
		
	}
}
}

class User{
	private int id;
	private String name;
	private double salary;
	private String hiredate;
	
	public User(){
		
	}
	
	
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	public double getSalary() {
		return salary;
	}


	public void setSalary(double salary) {
		this.salary = salary;
	}


	public String getHiredate() {
		return hiredate;
	}


	public void setHiredate(String hiredate) {
		this.hiredate = hiredate;
	}
 public String toString(){
	 return "id"+id+",name"+name+",salary"+",hiredate"+hiredate;
 }

	public User(int id, String name, double salary, String hiredate) {
		super();
		this.id = id;
		this.name = name;
		this.salary = salary;
		this.hiredate = hiredate;
	}
	
}

java.io

FileOutStream 写入数据  与    FileInputStream从文件读出数据,两个类仅对字节或字节数组读取

FileWriter  和FileReader 对应上述两类,这个为字符流

 

Buffered 等加上面,好处在于增加了缓存区 flush()方法

 

数据输入输出流

取数据时,不必在关心数值属于哪种字节(允许应用程序以及其无关的方式从底层输入流读取基本java数据类型)

 

 

线程

1.继承Thread类

2.实现Runnable接口

3.实现Callable接口

其中 .start() 方法为等待系统调用,与代码顺序无关

.run() 方法为顺序执行

 

Thread

子类继承Thread 具备了多线程能力

启动线程:子类对象.start()

不建议使用:避免OOP单继承局限

 

Runnable

实现接口Runnable具有多线程能力

启动线程:传入目标对象+Thread对象.start()

推荐使用:OOP多实现,灵活方便,方便同一份对象的代理

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值