【Java】HashMap 和 HashTable 的区别到底是什么?

  • 第一、继承不同

    第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。

1
2
public class HashMap<K, V> extends AbstractMap<K, V> implements Cloneable, Serializable {...}
public class Hashtable<K, V> extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable {...}

而HashMap继承的抽象类AbstractMap实现了Map接口:

1
public abstract class AbstractMap<K, V> implements Map<K, V> {...}

【Java】函数中的参数传递是“引用传递”还是“值传递”?

问题引入:在一个快速排序的函数 private void quickSort(List intList, int left, int right) 中,传进去的参数intList是对象传递还是引用传递呢?

先抛出结论:

  1. 将对象(对象的引用)作为参数传递时传递的是引用(相当于指针)。也就是说函数内对参数所做的修改会影响原来的对象。

  2. 当将基本类型或基本类型的包装集作为参数传递时,传递的是值。也就是说函数内对参数所做的修改不会影响原来的变量。

  3. 数组(数组引用))作为参数传递时传递的是引用(相当于指针)。也就是说函数内对参数所做的修改会影响原来的数组。

  4. String类型(引用)作为参数传递时传递的是引用,只是对String做出任何修改时有一个新的String对象会产生,原来的String对象的值不会做任何修改。(但是可以将新的对象的 引用赋给原来的引用,这样给人的表面现象就是原来的对象变了,其实没有变,只是原来指向它的引用指向了新的对象)。

【Android】Activity四种启动模式

Task栈

每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1–>Activity2–>Activity3,则任务栈为:

四种启动模式

启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;

启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;

【Android】onActivityResult()和onResume()的调用顺序问题

在Android生命周期中,如果使用到startActivityForResult(),则在新Activity被finish掉之后,onActivityResult()和onResume()到底是哪一个先调用的呢?

我们来看官方源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
* Called when an activity you launched exits, giving you the requestCode
* you started it with, the resultCode it returned, and any additional
* data from it. The <var>resultCode</var> will be
* {@link #RESULT_CANCELED} if the activity explicitly returned that,
* didn't return any result, or crashed during its operation.
*
* <p>You will receive this call immediately before onResume() when your
* activity is re-starting.
*
* <p>This method is never invoked if your activity sets
* {@link android.R.styleable#AndroidManifestActivity_noHistory noHistory} to
* <code>true</code>.
*
* @param requestCode The integer request code originally supplied to
* startActivityForResult(), allowing you to identify who this
* result came from.
* @param resultCode The integer result code returned by the child activity
* through its setResult().
* @param data An Intent, which can return result data to the caller
* (various data can be attached to Intent "extras").
*
* @see #startActivityForResult
* @see #createPendingResult
* @see #setResult(int)
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
}

【Android】如何启动调用其他app中的Activity

最近项目正在将原系统拆分为小型App,所以需要在原Project中启动另一个新的App中的Activity。这样的话启动要用到ComponentName ,它就是用来打开其他应用程序中的Activity或服务的。

用法其实很简单,像下面这样:

1
2
3
4
5
6
//第一个参数是Activity所在的package包名,第二个参数是完整的Class类名(包括包路径)
ComponentName componetName = new ComponentName("com.cybo3d.cybox.miya",
"com.cybo3d.cybox.miya.MainActivity");
Intent intent = new Intent();
intent.setComponent(componetName);
startActivity(intent);

【Android】保存图片到系统图库, 并立即显示在图库中

搬运原链接:http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery

正文

最近有些用户反映保存图片之后在系统图库找不到保存的图片,遂决定彻底查看并解决下。

Android中保存图片的方法可能有如下两种:

  • 第一种是自己写方法,如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static File saveImage(Bitmap bmp) {
File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
if (!appDir.exists()) {
appDir.mkdir();
}
String fileName = System.currentTimeMillis() + ".jpg";
File file = new File(appDir, fileName);
try {
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

如何删除多行首字母,Sublime Text多行编辑运用

一、问题描述:

问答区有个问题是这样问的:如何在eclipse中删除多行首字母?

题主的问题是代码中每行都有序号,这些序号一行一行地删太麻烦,如何进行批量删除?我们在进行代码重用的时候时常会出现行号同时被复制的情况,比如下面的这点代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
155.     @Override  
156. public boolean onKeyDown(int keyCode, KeyEvent event)
157. {
158. Log.d("onKeyDown:", " keyCode=" + keyCode + " KeyEvent=" + event);
159. switch (keyCode)
160. {
161. case KeyEvent.KEYCODE_DPAD_UP:
162.
163. break;
164. case KeyEvent.KEYCODE_DPAD_DOWN:
165.
166. break;
167. case KeyEvent.KEYCODE_DPAD_LEFT:
168. //右左按键可以控制第一进度的增减
169. pb.setProgress( pb.getProgress()-5 );
170. break;
171. case KeyEvent.KEYCODE_DPAD_RIGHT:
172. pb.setProgress( pb.getProgress()+5 );
173. break;
174. case KeyEvent.KEYCODE_DPAD_CENTER:
175.
176. break;
177. case KeyEvent.KEYCODE_0:
178. break;
179. }
180. return super.onKeyDown(keyCode, event);
181. }
182. }

Ubuntu上Eclipse识别不了Android手机的解决方法

转载链接: http://www.cnblogs.com/AndroidManifest/archive/2011/12/09/2281635.html

google官方开发向导里对Android手机已经设置了允许安装非market程序,并且处于usb调试模式,但是仍然在usb连接电脑后无法被识别的问题作了解释。官方网址:http://developer.android.com/guide/developing/device.html

操作步骤:

如果是windows平台下,需要安装一个为adb准备的usb驱动。如果是Ubuntu Linux需要添加一个rules文件,里面包含了每一个想要调试的设备的usb配置信息。以HTC手机为例实现步骤如下:

1、在终端输入 :

1
sudo gedit /etc/udev/rules.d/51-android.rules

【Java】操作excel表,包括创建、读取、以及修改

作者的网站上对它的特征有如下描述:

  • 支持Excel 95-2000的所有版本
  • 生成Excel 2000标准格式
  • 支持字体、数字、日期操作
  • 能够修饰单元格属性
  • 支持图像和图表

应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

搭建环境

下载jxl.jar(可以点击这里进行下载),放入classpath,安装就完成了。


Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 iTimeTraveler All Rights Reserved.

访客数 : | 访问量 :