Java中HashMap和HashTable的区别

HashMap 是Hashtable 的轻量级实现(非线程安全的实现),他们都完成了Map 接口,主要区别在于HashMap 允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。

HashMap 允许将null 作为一个entry 的key 或者value,而Hashtable 不允许。

HashMap 把Hashtable 的contains 方法去掉了,改成containsvalue 和containsKey。因为contains方法容易让人引起误解。

Hashtable 继承自Dictionary 类,而HashMap 是Java1.2 引进的Map interface 的一个实现。

最大的不同是,Hashtable 的方法是Synchronize 的,而HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

Hashtable 和HashMap 采用的hash/rehash 算法都大概一样,所以性能不会有很大的差异。

Java中Collection和Collections的区别

前几天去一个公司参加面试遇到这个问题,Java中Collection和Collections的区别,当时不会,回来从网上找到,现在记录一下。

1、java.util.Collection 是一个 集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack└Set

2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的 静态多态方法。此类 不能实例化 ,就像一个 工具类,服务于Java的Collection框架。

import java.util.ArrayList;      
import java.util.Collections;      
import java.util.List;      
public class TestCollections {      
    public static void main(String args[]) {     
        //注意List是实现Collection接口的       
        List list = new ArrayList();      
        double array[] = { 112, 111, 23, 456, 231 };      
        for (int i = 0; i < array.length; i++) {      
            list.add(new Double(array[i]));      
        }      
        Collections.sort(list);      
        for (int i = 0; i < array.length; i++) {      
            System.out.println(list.get(i));      
        }      
        // 结果:23.0 111.0 112.0 231.0 456.0      
    }      
}

Linux下SVN的使用

今天在新浪sae上搭建了个人博客,新浪sae采用svn的方式进行代码管理,之前在windows下面做svn操作都是采用TortoiseSVN,今天正好开机到了linux下面,那么好吧,就用svn传我的wordpress到sae中去。

首先,安装svn。

sudo apt-get install subversion

ubuntu下面安装svn,就是这么简单。
<!– more –>
可以通过man svn查看使用手册。

下面介绍一些常用命令:
1.检出文件(checkout)。
使用命令:

svn co http://{svn repository url} /destination

然后系统会用当前的用户名登录,提示输入密码,如果第一次密码输入错误,会提示你输入用户名;输入正确后,就可以检出文件了。

2、Ubuntu SVN提交文件(commit)。
进入需要更新的目录,输入命令:

svn commit -m path-to-commit

,其中path-to-commit可以为空,成功后会提示更新后的版本号。

3、更新文件(update)。

svn update

,在要更新的目录运行这个命令就可以了。

4、查看日志(log)。

svn log path

5.删除文件

svn delete svn://xxx.com/test.php -m “delete test file”

或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种简写:svn (del, remove, rm)

更多使用方法,自己查看手册吧。

intent和intent过滤以及匹配规则

在Android系统中打开Activity,Service, BroadCast 都需要使用到Intent(意图),那么作为一个开发者就需要知道怎么使用Intent,知道怎么通过Intent的匹配规则打开其他的组件,或者给其他组件提供访问接口。因此在这里总结一下Intent和Intent的匹配规则。

Intent使用示例

显式使用Intent

Intent intent = new Intent(context, XXXActivity.class);
intent.putExtra(Intent.EXTRA_TEXT, "string text");

隐式使用

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parser("http://blog.isming.me"));

AndroidManifest定义IntentFilter规则
xml
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

以上是简单的Intent示例,下面看Intent里面有那些东西,以及Intent的解析规则.

Intent的成员

action 动作,比如上面的隐式Intent,就是传递了一个View的动作.

data 数据,通过Intent发送的数据, 上面的隐式意图就是通过Uri解析出来数据

category 标签

type 类型 上面的隐式意图就是通过Uri来解析出来类型,即MIME type.

component 组件,即要打开的组件的信息,包名+类名.上面的显式意图就是设置要打开的组件。其他隐式意图也是通过各种参数来最终获取组件。

extras 附加数据,在Intent中附加传递的数据.

IntentFilter

IntentFilter,刚刚的一个xml配置的intentFilter,同时也可以在代码中配置。通过IntentFilter可以过滤掉不需要的一些隐式意图,必须有action 和category,还可以附加data规则,包含(data type 和data scheme+authority+path),通常一个Url包含://:/,可以通过设置data规则只有在指定的格式才能打开页面。

比如:

<intent-filter>
    <data android:mimeType="image/*" />
    ...
</intent-filter>

上面这个就只有数据是图片的时候才可以打开。

<intent-filter>
    <data android:scheme="http" />
    ...
</intent-filter>

上面这个规则则只允许数据是http的网址可以。

参考资料:

http://developer.android.com/guide/components/intents-filters.html

http://developer.android.com/reference/android/content/IntentFilter.html