java高级基础备忘


props.load(new FileInputStream("db.properties")); 是读取当前目录的db.properties文件
getClass.getResourceAsStream("db.properties"); 是读取当前类所在位置一起的db.properties文件
getClass.getResourceAsStream("/db.properties"); 是读取ClassPath的根的db.properties文件,注意ClassPath如果是多个路径或者jar文件的,只要在任意一个路径目录下或者jar文件里的根下都可以,如果存在于多个路径下的话,按照ClassPath中的先后顺序,使用先找到的,其余忽略.


/**method one */
//URL DATABASE_CONFIG = ConnectionManager.class.getResource("/privilegeConfig.properties");
//is = new FileInputStream(DATABASE_CONFIG.getFile());
/**method two */
// is = ConnectionManager.class.getResourceAsStream("/privilegeConfig.properties");
/**method three */
is = new BufferedInputStream(new FileInputStream(ResourceUtils.getFile("classpath:" + filePath)));
props.load(is);



[b]集合转换数组和集合内部排序[/b]:

Map<String, Integer> errRecords = new HashMap<String, Integer>();
errRecords.put("test", 1);
errRecords.put("test1",4 );
errRecords.put("test2",55 );
errRecords.put("test3", 33);
errRecords.put("test4",2 );
errRecords.put("test5",6);
errRecords.put("test6", 787);
Integer[] errs = errRecords.values().toArray(new Integer[0]);
Arrays.sort(errs, new Comparator<Integer>()
{
public int compare(Integer o1, Integer o2)
{

return o2.intValue() - o1.intValue();
}
});

for (int i = 0; i < errs.length; i++) {
System.out.println(errs[i].toString());
}



幽灵引用 -- 好强大的文章

[url]http://www.iteye.com/topic/401478[/url]


ThreadLocal -- 非常全面解释了这个怪东东

[url]http://www.iteye.com/topic/103804[/url]



Concurrent -- 并发啊

[url]http://www.iteye.com/topic/363625[/url]



泛型 -- 泛型一箩筐

[url]http://www.java3z.com/cwbwebhome/article/article5/tiger2.jsp[/url]



Comparator和Comparable -- 这个怪叔叔不算高级了,但是可以深入的了解一下它类似的设计模式 -- 策略模式。。如有兴趣还要把它和枚举放到一起

http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html



public abstract class Enum<E extends Enum<E>>   
implements Comparable<E>, Serializable

public abstract class Enum<E extends Enum<E>>
implements Comparable<E>, Serializable


ListIterator -- 怪东东,虽然不难,但我竟然没有听过,更别提用过了。看看JDK源码中关于list的reverse实现

public static void reverse(List<?> list) {   
int size = list.size();
if (size < 18 || list instanceof RandomAccess) {
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)
swap(list, i, j);
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}

public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}

public static void reverse(List<?> list) {
int size = list.size();
if (size < 18 || list instanceof RandomAccess) {
for (int i=0, mid=size>>1, j=size-1; i<mid; i++, j--)
swap(list, i, j);
} else {
ListIterator fwd = list.listIterator();
ListIterator rev = list.listIterator(size);
for (int i=0, mid=list.size()>>1; i<mid; i++) {
Object tmp = fwd.next();
fwd.set(rev.previous());
rev.set(tmp);
}
}
}

public static void swap(List<?> list, int i, int j) {
final List l = list;
l.set(i, l.set(j, l.get(i)));
}

写道
List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator和ListIterator主要区别在以下方面:

1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能

2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用迭代器来实现。



你真的理解finally了吗,看看这篇文章后,你或许不会这么自信了

[url]http://zangxt.iteye.com/blog/421508[/url]



Java类加载机制 -- 很好的博文

[url]http://lavasoft.blog.51cto.com/62575/184547[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值