java进阶

java集合

Collection

List

ArrayList

jdk1.2,异步处理,性能高,线程不安全

Vector

jdk1.0,同步处理,性能低,线程安全

Set

HashSet

散列存放

hashCode是为了提高在散列结构存储中查找的效率,在线性表中没有作用。

若两个对象equals返回true,则hashCode有必要也返回相同的int数。

若两个对象equals返回false,则hashCode不一定返回不同的int数,但为不相等的对象生成不同hashCode值可以提高哈希表的性能。

若两个对象hashCode返回相同int数,则equals不一定返回true。

若两个对象hashCode返回不同int数,则equals一定返回false。

equals()对比是绝对可靠,hashCode不是绝对可靠

equals()效率低,hashcode效率高

先通过hashcode比较,相等时在比较equals,相对效率更高。

TreeSet

有序存放

TreeSet类型是J2SE中唯一可实现自动排序的类型

Map

//推荐,尤其是容量大时
System.out.println("通过Map.entrySet遍历key和value");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
}

HashMap

HashTable

Iterator

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
list.remove(2);
System.out.println(iterator.next());
}
//ConcurrentModificationException List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String str = iterator.next();
if(str.equals("A"))
iterator.remove();
else
System.out.println(str);
}
}
B
C
D

java文件

文件基本操作

File file = new File("hello.txt");
if(file.exists()){
//file.delete();
File file1 = new File("hello1.txt");
//重命名文件必须处于同一个分区内,不在同一个分区可以使用拷贝文件
file.renameTo(file1);
System.out.println(file.isDirectory());
}else{
try {
file.createNewFile();
} catch (IOException e) {
System.out.println("文件创建失败");
}
}

java IO

使用字节流读取文件

try {
FileInputStream fis = new FileInputStream("hello.txt");
byte[] buffer = new byte[20];
fis.read(buffer);
String str = new String(buffer);
System.out.println(str);
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

使用字节流写入文件

try {
FileOutputStream fos = new FileOutputStream("test.txt");
String str = "test";
byte[] buffer = str.getBytes("UTF-8");
fos.write(buffer);
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

使用缓冲字节流读写文件

try {
FileInputStream fis = new FileInputStream("test.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream("test1.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
byte[] buffer = new byte[1000];
bis.read(buffer);
bos.write(buffer); bos.close();
fos.close();
bis.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

使用缓存字符流读取文件

File file = new File("hello.txt");
if(file.exists()){
try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine())!=null){
System.out.println(line);
}
br.close();
isr.close();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }else{
System.out.println("文件不存在");
}

对于文本文件读写:字符流效率高于字节流

FileReader与 FileWriter

try {
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter("test2.txt");
BufferedWriter bw = new BufferedWriter(fw);
String line = null;
while ((line = br.readLine()) != null) {
bw.write(line + "\n");
}
bw.flush();
bw.close();
fw.close();
br.close();
fr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

RandomAccessFile

完成随机读取功能,可以读取指定位置的内容。

服务器的日志文件往往达到400多M,简单的文件读取实在太慢,太占用机器资源。如果需要统计一些即时数据。比如刚才10分钟的来访客户,即时扫描大数据文件中的一部分显得非常之重要,用RandomAccessFile。

Apache IO库

File file = new File("test.txt");
FileUtils.readFileToString(file,"UTF-8");

java 线程

线程的状态转换

run()方法是普通的方法调用,并不是启用线程,而start方法是首先启动一个新的线程,然后运行run()方法里面的代码。

Thread.currentThread().getName() //得到当前线程名字

A.join():堵塞当前线程B,直到A执行完毕并死掉,再执行B。

A.yield():让出位置,给B执行,B执行结束A再执行。与join相反。

Yield不能保证使得当前正在运行的线程迅速转换到可运行的状态,不保证一定产生效果,仅能使一个线程从运行状态转到可运行状态,而不是等待或阻塞状态.

setPriority():设置线程优先级

优先级并不是很靠谱,因为Java线程是通过映射到系统的原生线程上来实现的,所以线程调度最终还是取决于操作系统。

Java线程调度就是抢占式调度。

stop()被弃用,本身不安全,会导致线程逻辑不完整。破坏了原子逻辑.用自定义的标志位停止线程。

线程的停止

class SafeStopThread extends Thread {
//此变量必须加上volatile
private volatile boolean stop = false;
@Override
public void run() {
//判断线程体是否运行
while (!stop) {
// Do Something
}
}
//线程终止
public void terminate() {
stop = true;
System.out.println("Stop");
}
}

继承Thread类创建线程

extend Thread,并复写run()方法

实现Runnable接口创建线程

实现run()方法

Callable FutureTask

实现Callable接口通过FutureTask包装器来创建Thread线程

Callable callable = new MyCallable();
FutureTask task = new FutureTask(callable);
Thread thread = new Thread(task);
thread.start();
try {
System.out.println(task.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} ... class MyCallable implements Callable<Integer> { @Override
public Integer call() throws Exception {
return 13;
}
}

使用ExecutorService、Callable、Future实现有返回结果的线程

ExecutorService executorService = new ThreadPoolExecutor(3,3,0,TimeUnit.DAYS,new LinkedBlockingQueue<Runnable>(2));
Callable callable1 = new MyCallable();
FutureTask task1 = new FutureTask(callable);
List<Future> futures = new ArrayList<>();
for (int i = 0; i < 3; i++) {
Callable c = new MyCallable();
Future f = executorService.submit(c);
futures.add(f);
}
for (Future f : futures) {
System.out.println(">>>" + f.get().toString());
}

同步和死锁

synchronized

7.19实习培训日志- java进阶的更多相关文章

  1. 7.20实习培训日志-Java基础程序设计结构

    Java基础程序设计结构 在 Math 类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程,如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类,它使用 ...

  2. 7.17实习培训日志-java基础

    总结 今天主要是学习了java基础,java面向对象方面的知识,然后下午老师讲了软件的设计模式,今天看了一部分,印象深刻的是单例模式,用枚举实现单例模式.晚上主要讲了maven的一些基础知识和idea ...

  3. 7.15实习培训日志 java题解

    周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...

  4. 7.30实习培训日志-SQL优化

    总结 今天早上考试,下午主要是老师引导我们学习SQL优化,晚上主要是同学的技术分享,杨松柏同学主要给我们分享了java的io的一些东西,c10k问题,bio(同步阻塞IO),NIO(同步非阻塞IO), ...

  5. 7.27实习培训日志-Oracle SQL(三)

    Oracle SQL(三) 视图 特性 简单视图 复杂视图 关联的表数量 1个 1个或多个 查询中包含函数 否 是 查询中包含分组数据 否 是 允许对视图进行DML操作 是 否 CREATE [OR ...

  6. 7.24实习培训日志-Docker-Compose

    Docker-Compose 对于昨天的考试,需要 项目根目录下需要docker/mysql/Dockerfile 文件用于构建mysql镜像 项目根目录下需要docker/java/Dockerfi ...

  7. 7.23实习培训日志-JDBC

    总结 今天下午考试,JDBC,这个本身很简单,但是需要我们Dockerfile+Docker Compose运行,这个东西就很复杂.原来学习时没有怎么看,这一次就很懵,完全不知道怎么弄,反正环境都没有 ...

  8. 7.21实习培训日志-JDBC JSP Servlet

    JDBC JSP Servlet 总结 今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简 ...

  9. 7.22实习培训日志-JSP Servlet

    周末总结 今天下午在学习servlet,想自己做一个简单的例子,于是用idea新建一个maven项目,为了后文叙述方便,我们取名为项目1,点击create from archetype,我先选择org ...

随机推荐

  1. EasyPlayerPro windows播放器在播放RTMP视频显示重复异常问题解决

    问题来源 2017.12.18 今日有杭州某教育领域客户反馈EasyPlayerPro在播放一个rtmp源时,画面显示异常的问题.截图如下: 问题复现 一番思考, 将显示格式改为D3D显示, 正常, ...

  2. detached HEAD state

    1 detached HEAD state指的是什么 正常情况下,HEAD指向一个branch,而branch又指向一个commit. detached HEAD state指的是HEAD指针没有指向 ...

  3. Tomcat学习笔记【4】--- Server.xml配置文件详解

    本文主要讲如何配置Tomcat服务器. 首先展示一个BS结构图: 1 server 一个server就表示一个Tomcat实例. 1)port 指定一个端口,这个端口负责监听关闭tomcat的请求: ...

  4. 深入了解Cookie(1)------selenium2进行Cookie操作的前奏

    世界上最宽阔的是海洋,比海洋还宽阔的是天空,比天空还宽阔的是人的心量.做人的心量有多大.人生的成就就有多大. 不为一己之利去争.去斗.去夺,扫除报复之心和妒忌之念.自然"心底无私天地宽&qu ...

  5. Extjs — Grid数据导出成Excel

    最近因为项目问题,需要解决Extjs导出成Excel的问题. 下面简单描述这个问题解决的步骤如下: 1.先在js文件里写了一个button的handler事件,通过点击按钮,来实现调用ExportEx ...

  6. HTML5模拟衣服撕扯效果

    在线演示 本地下载

  7. debian支持的系统架构介绍

    debian系统支持类型有armel.armhf.i386.amd64.mips.mipsel, powerpc.sparc.s390.s390x等. 详细对比文章见https://www.debia ...

  8. java: new Date().getTime() 与 System.currentTimeMillis() 与 System.nanoTime()

    java使用new Date()和System.currentTimeMillis()获取当前时间戳   在开发过程中,通常很多人都习惯使用new Date()来获取当前时间,使用起来也比较方便,同时 ...

  9. Linux下新建oracle用户

    su - oraclesqlplus / as sysdba the procedure of dropping user are as follow: select sid,serial# from ...

  10. java.sql.SQLException: Access denied for user 'somebody'@'localhost' (using password: YES)

    用mybatis和spring整合时出现了一个错误: 我是在IntelliJ IDEA上整合Mybatis和Spring的,运行测试用例出现了如上错误. 红色的马赛克部分是我的名字. 问题是,我的数据 ...