Iterator<String> it = list.iterator(); while(it.hasNext()){ String item = it.next(); list.remove(item); //报错!!! }
for(String s : list){ list.remove(s); //报错!!! }
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()方法。
各数据类型按容量大小(表数范围大小)由小到大排列为:
byte <—— short, char <——int <——long <——float <——double
1)运算时,容量小的类型自动转换为容量大的类型;
2)容量大的类型转换为容量小的类型时,要加强制转换符,且精度可能丢失;
如:float f = 1.2f;
3)short,char之间不会互相转换(需要强制转换),byte、short、char并且三者在计算时首先转换为int类型;
4)实数常量默认为double类型, 整数常量默认为int类型;
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; }
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; }
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 { }
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); }
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());