转JAVA2
1、List遍历时删除的几种方式比较
- Iterator<String> it = list.iterator();
- while(it.hasNext()){
- String item = it.next();
- list.remove(item); //报错!!!
- }
- for(String s : list){
- list.remove(s); //报错!!!
- }
以上都是报java.util.ConcurrentModificationException,某个线程在 Collection 上进行迭代时,通常不允许另一个线性修改该 Collection,因为在这些情况下,迭代的结果是不确定的。
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println("----------list大小1:--"+list.size());
- for (int i = 0; i < list.size(); i++) {
- if (2 == list.get(i)) {
- list.remove(i);
- }
- System.out.println(list.get(i));
- }
- System.out.println("最后输出=" + list.toString());
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println("----------list大小1:--"+list.size());
- for (int i = 0; i < list.size(); i++) {
- list.remove(i);
- }
- System.out.println("最后输出=" + list.toString());
输出的结果如下:
- List<Integer> list = new ArrayList<Integer>();
- list.add(1);
- list.add(2);
- list.add(2);
- list.add(3);
- list.add(4);
- System.out.println("----------list大小1:--"+list.size());
- Iterator<Integer> it = list.iterator();
- while(it.hasNext()){
- Integer item = it.next();
- if (2 == item) {
- it.remove();
- }
- System.out.println(item);
- }
- System.out.println("最后输出=" + list.toString());
对于iterator的remove()方法,也有需要我们注意的地方:
1、每调用一次iterator.next()方法,只能调用一次remove()方法。
2、调用remove()方法前,必须调用过一次next()方法。
2、Java基本数据类型及包装类
shot(短整型) 16位 Short
int(整型) 32 位 Integer
long(长整型) 64 位 Long
float(浮点型) 32 位 Float
double(双精度) 64 位 Double
char(字符型) 16 位 Character
各数据类型按容量大小(表数范围大小)由小到大排列为:
byte <—— short, char <——int <——long <——float <——double
1)运算时,容量小的类型自动转换为容量大的类型;
2)容量大的类型转换为容量小的类型时,要加强制转换符,且精度可能丢失;
如:float f = 1.2f;
3)short,char之间不会互相转换(需要强制转换),byte、short、char并且三者在计算时首先转换为int类型;
4)实数常量默认为double类型, 整数常量默认为int类型;
3、switch中的参数类型
- enum EnumTest {
- LEFT,
- RIGHT
- }
- EnumTest e = EnumTest.LEFT;
- switch (e) {
- case LEFT:
- System.out.println("----left-----");
- break;
- default:
- break;
- }
- String str = "abc";
- switch (str) {
- case "abc":
- System.out.println("-----abc-----");
- break;
- case "aaa":
- System.out.println("-----aaa-----");
- break;
- }
4、equals与==的区别
- if(12 == 12.0){
- System.out.println("-----12 == 12.0-------");
- }
- public boolean equals(Object obj) {
- return (this == obj);
- }
- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String) anObject;
- int n = value.length;
- if (n == anotherString.value.length) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = 0;
- while (n-- != 0) {
- if (v1[i] != v2[i])
- return false;
- i++;
- }
- return true;
- }
- }
- return false;
- }
- public boolean equals(Object obj) {
- if (obj instanceof Integer) {
- return value == ((Integer)obj).intValue();
- }
- return false;
- }
5、Object有哪些公用方法
- public boolean equals(Object obj) {//判断是否同一个对象,具体见上一点总结
- return (this == obj);
- }
- public String toString(){
- return getClass().getName() + "@" + Integer.toHexString(hashCode());
- }
- //返回该对象的哈希码值,重写了equals方法一般都要重写hashCode方法
- public native int hashCode();
- /**
- *wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
- *调用该方法后当前线程进入睡眠状态,直到以下事件发生。
- *(1)其他线程调用了该对象的notify方法。
- *(2)其他线程调用了该对象的notifyAll方法。
- *(3)其他线程调用了interrupt中断该线程。
- *(4)时间间隔到了。
- *此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
- *如:Person p = new Person();
- *p.wait()//使用Person p对象作为对象锁。
- */
- public final void wait() throws InterruptedException {...}
- public final native void wait(long timeout) throws InterruptedException;
- public final void wait(long timeout, int nanos) throws InterruptedException {...}
- //该方法唤醒在该对象上等待的某个线程。如p.notify();
- public final native void notify();
- //该方法唤醒在该对象上等待的所有线程。
- public final native void notifyAll();
- public final native Class<?> getClass();//获得运行时类型
- //创建并返回此对象的一个副本。只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
- protected native Object clone() throws CloneNotSupportedException;
- //用于释放资源。当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。也可手动调用,自己实现一些资源的释放。
- protected void finalize() throws Throwable { }
6、Java中的四种引用:强引用、软引用、弱引用、虚引用
如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。如下使用代码:
- String str= new String("abc"); //强引用
- Refenrence sr = new SoftReference(str); //软引用
- //引用时
- if(sr!=null){
- str= sr.get();
- }else{
- str= new String("abc");
- sr = new SoftReference(str);
- }
软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收器回收,Java虚拟机就会把这个软引用加入到与之关联的引用队列中。
2 将堆中的对象new String("abc");设置为可结束的(finalizable)。
3 当heap中的new String("abc")对象的finalize()方法被运行而且该对象占用的内存被释放, sr被添加到它的ReferenceQueue中。
- String str = new String("abc");
- SoftReference<String> soft = new SoftReference<String>(str); //软引用
- str = null;
- System.out.println("before gc:" + soft.get());
- System.gc();
- System.out.println("after gc:" + soft.get());
- String str = new String("abc");
- WeakReference<String> soft = new WeakReference<String>(str); //弱引用
- str = null;
- System.out.println("before gc:" + soft.get());
- System.gc();
- System.out.println("after gc:" + soft.get());
6.4 虚引用(PhantomReference)
转JAVA2的更多相关文章
- java2集合框架的一些个人分析和理解
Java2中的集合框架是广为人知的,本文打算从几个方面来说说自己对这个框架的理解. 下图是java.util.Collection的类图(基本完整,有些接口如集合类均实现的Cloneable.Seri ...
- 《Java2 实用教程(第五版)》学习指导
<Java2 实用教程(第五版)> 第1章Java入门 主要内容:P1 1.1Java的地位:P1 1.2Java的特点:P2 1.3安装JDK:P5 1.4Java程序的开发步骤:P8 ...
- 《Java2 实用教程(第五版)》教学进程
目录 <Java2 实用教程(第五版)>教学进程 预备作业1:你期望的师生关系是什么? 预备作业2 :学习基础和C语言基础调查 预备作业3:Linux安装及命令入门 第一周作业 第二周作业 ...
- java2 -宏观了解
java2 -宏观了解 2016-01-24 16:17 308人阅读 评论(38) 收藏 举报 分类: JAVA(2) 版权声明:本文为博主原创文章,未经博主允许不得转载. Java2平台包括: ...
- 【Java 理论篇 1】Java2平台的三个版本介绍
导读:关于java的三种分类J2SE.J2EE.J2ME,在网上有很多资料,然后自己写的,也大多是从各个网站上搜罗里的.算是自己的一种笔记,或者明白的说,就是把别人的东西抄一遍.但是,这对于我来说,也 ...
- Java2年开发工作经验面试总结
Java2年开发工作经验面试总结最近换了个公司,从二月底开始面,面到三月底,面了有快二十五家公司.我是一个喜欢总结经验的人,每经过一场面试,我在回来的路上都会仔细回想今天哪些问题可以答的更好,或者哪些 ...
- java2
1:关键字(掌握) (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字 ...
- BTrace: DTrace for Java2
BTrace: DTrace for Java… ish 时间 2012-04-24 16:17:55 dtrace.org 原文 http://dtrace.org/blogs/ahl/2012 ...
- java2实用教程102小程序(分数计算和流水线计算
import java.util.Scanner; public class test{ public static void main(String args[]){ Rational a=new ...
随机推荐
- Zygote浅谈
Zygote是什么 操作系统中,进程实际上是文件到地址空间的映射像.进程将要运行时,由操作系统将其映射到地址空间,完成这项工作的事物本质也应是一个进程,我们称这个进程为孵化进程,那么这个进程怎么收到消 ...
- grunt-contrib-uglify压缩插件的常用配置属性
mangle:false(不混淆变量名和方法名,保留原有的名字),如果不配置,默认混淆,就是将所有方法名和变量都用a,b,c等字母替换 preserveComments : 'all'(不删除注释,还 ...
- 华为acl(traffic-filter)和dhcp管理
华为alc配置实例:-traffic-filter # 在VLAN100上配置基于ACL的报文过滤,允许源IP地址为192.168.0.2/32的报文通过,丢弃其他报文. <HUAWEI> ...
- zabbix_proxy安装[yum mysql5.6]
安装mysql rpm -ivh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm 修改mysql配置: [m ...
- document.elementFromPoint在IE8下无法稳定获取当前坐标元素的解决方法
document.elementFromPoint(e.clientX, e.clientY) document.elementFromPoint(e.clientX, e.clientY) 执行2次 ...
- 编写更少量的代码:使用apache commons工具类库
Commons-configuration Commons-FileUpload Commons DbUtils Commons BeanUtils Commons CLI Commo ...
- logstash搭建日志追踪系统
前言 开始博客之前,首先说下10月份没写博客的原因 = =. 10月份赶上国庆,回了趟老家休息了下,回来后自己工作内容发生了点改变,开始搞一些小架构的东西以及研究一些新鲜东西,当时我听到这个消息真的是 ...
- 生成 PDF 全攻略【1】初体验
经历过多少踩坑,翻看过多少类似博客,下载过多少版本的Jar,才能摸索出正确的代码书写方式,才能实现项目经理需求分析书中的功能点. 本文借一次 JavaEE 生成PDF的颠簸的实现过程,描述中小公司程序 ...
- Webwork 学习之路【05】请求跳转前 xwork.xml 的读取
个人理解 WebWork 与 Struts2 都是将xml配置文件作为 Controler 跳转的基本依据,WebWork 跳转 Action 前 xml 文件的读取依赖 xwork-1.0.jar, ...
- 【分布式协调】之理解paxos
感叹一下 不得不说近几年国内软件行业发生了巨大的变化,之前几乎所有应用都围绕桌面展开,而近几年很多让人神魂颠倒的关键词一个接一个的映入眼帘:web2.0.移动应用.云计算.大数据.互联网的浪潮一波接着 ...