http://faxzero.com/
https://portal.pamfax.biz/PortalLogin/Init/
Collections Framework
Collection 数据的合集
提供添加、删除、遍历其数据的功能。
Set 集合(对应数学上的集合,所以具有元素顺序无关性和元素无重复的性质)
功能和Collection相同,就是对于元素的限定与Collection不同。
SortedSet 有序集合
增加了实现类要对元素进行排序的规定,这样才能更好的利用它的顺序相关方法(如:访问两个元素间的元素视图,访问某元素以上的元素视图等)。
NavigableSet 可导航集合
增加了导航的功能,即访问<某元素的最大元素(lower), >某元素的最小元素(higher), <=某元素的最大元素(floor), >=某元素的最小元素(ceiling)元素的功能
List 列表(有顺序,允许重复元素,允许多个null元素)
除了Collection的功能,还增加了索引添加、删除、访问的功能。
Map 映射(不允许重复的key,一个key只有一个值,key可以为null,顺序由map的某个视图的iterator来确定)
添加、删除、访问、遍历键值对的功能
SortedMap 有序的映射(在Map的基础上增加了一些约束,就是要求对其元素的key进行排序)
除了Map的功能,增加了利用顺序的一些方法
NavigableMap 可导航映射
在SortedMap的基础上增加了导航的功能,即访问<某元素的最大元素(lower), >某元素的最小元素(higher), <=某元素的最大元素(floor), >=某元素的最小元素(ceiling)元素的功能
Queue 队列(增加不允许插入null的限制)
除了Collection的功能,还增加了队列方式的添加,获取和检查元素的功能。
Deque (double ended queue)双端队列
在Queue基础上,增加在头和尾都可以添加、获取和检查元素的功能。
public interface Factory<T> {
public T createObject();
}
public class Factory1 implements Factory<Child1> {
@Override
public Child1 createObject() {
return new Child1();
}
}
public class Factory2 implements Factory<Child2> {
@Override
public Child2 createObject() {
return new Child2();
}
}
// 这里T没有限制,所以在T为Child2而? extends T为Child1时就会出现ClassCast异常
private class Pool<T> {
// 持有的是T的子类,但具体是哪个子类不知道
private Factory<? extends T> factory;
public Pool(Factory<? extends T> factory) {
this.factory = factory;
}
public T create() {
return factory.createObject();
}
}
public void test2() {
Pool<Child2> pool = new Pool(new Factory1());
// create根据pool引用变量的"类型参数"来cast
Child2 c2 = pool.create();
}
只在读取和存储时使用?,普通的直接用explict类参
SomeClass<Child> ref1 = ...;
// 强制cast为Child
ref1.get();
SomeClass<? extends Father> ref2 = ref1;
// 这样的话就只会强制cast为Father了
ref2.get();
// 如何用Class来进行泛型的强制类型转换
####################################################################################################
android
####################################################################################################
res/raw, asset, res/xxx的区别
| 存放任意文件 | 生成id | 预编译为二进制 | 子目录 | 引用方式 |
assets | 是 | 否 | 否 | 是 | getAssets().open(file_path) |
/res/raw | 是 | 是 | 否 | 否 | getResource().openRawResource(resId) |
/res/xxx | 指定类型文件 | 是 | 是 | 否 | getResource().getXxx(resId) |
想更自由(如:创建子目录,用文件名引用)就用asset
####################################################################################################
程序基础
####################################################################################################
原码、反码、补码
参考:
http://blog.csdn.net/ncdawen/article/details/846672
在计算机中,数都是用补码来表示的;主要是方便计算。减法可以用加法来算。
对于有符号数:
127:
原码:01111111
反码:01111111
补码:01111111。
反码和补码表示发规定正数的反码和补码相同。
-1:
原码:10000001
反码:11111110(除了符号位,其余位取反)
补码:11111111(反码加1)
一个有8位的数,它可以有256个不同的值,0~255;11111111表示的只是其中的一个值255。
计算机不区分正负,只是在代码层面对正负进行了区分。如果计算机中有一个值为10000001,如果这个值所对应的变量被标记为signed时,那它被程序解释后就是-127;如果这个值所对应的变量被标记为unsigned时,那它就被程序解释后就是129。
unsigned char c = 0x81; // 0b10000001
printf("%d\n", c); // 结果为129
char d = 0x81; // 0b10000001
printf("%d\n", d); // 结果为-127
unsigned char num1 = 127;
char num2 = 1;
unsigned char result1 = 0;
result1 = num1 + num2;
printf("%d\n", result1); // 128
char result2 = 0;
result2 = num1 + num2;
printf("%d\n", result2); // -128,因为此时计算机中表示为10000000,然后程序发现该变量是有符号的,则将该值解释为-128
// 如果无符号数和有符号负数做加法时,符号位是如何处理的。
unsigned char num1 = 127; // 0b01111111
char num2 = -1; // 0b10000001
unsigned char result1 = 0;
// num1, num2首先会被转换为无符号int。num2变为0b00000001(直接将符号位置0)
// 然后再分别用它们的补码进行运算。
result1 = num1 + num2;
printf("%d\n", result1); // 126
char result2 = 0;
result2 = num1 + num2;
printf("%d\n", result2); // 126
浮点数相关
class MyFloat {
// 123455621,位数是3
// 但是你使用计算的时候 就可以把它当做
// 123455.621
// 分开计算就是了
// 除以1000
// 和%1000
/**
* 小数位数。
*/
private int digits;
/**
* 数据。
*/
private int value;
public float value() {
float value = 0;
int base = Math.pow(10, digits);
value += value / base;
value += value % base;
return value;
}
}
####################################################################################################
puzzle me
####################################################################################################
未实现的方法是不是该抛UnsupportedOperationException?
1. 它是一个RuntimeException,表示代码的错误(或不可恢复的错误、没有合理的值来表示错误、只会因确定因素导致的CheckedException(MediaPlayer抛IOException,而播放的文件全是程序内置资源))。
2. 对于已近嵌入在框架中的接口,我们绝对是不能在实现代码中抛该Exception(即使没有任何实现),因为那样代码是无法正常运行的。
3. 对于在集合框架中(thinking in java)中提到的不是部分方法会抛该异常,那外一我们把一个会抛异常的List对象传入了需要List的方法,那岂不是程序会抛异常了。那就是编程错误了,就是说在那里我们不能用那个List,那个方法需要的是一个不抛异常的List对象。
4. 这个异常是用来提示我们的,提示我们这个类没有实现该方法,我们不该调用。而不是去用来提示别人(框架)的,因为别人是我们无法控制的。所以我们在调用别人的东西的时候,用2中所说的。
####################################################################################################
线程
####################################################################################################
volatile
一个对象的变量在被一个线程修改后,不一定能够马上被另外一个线程所看到,比如:ui线程将boolean isPause设为true,不一定能够被绘制线程马上看到(因为修改的值是修改的线程堆栈上的一个拷贝,而不是直接改的内存中的变量)。在加上volatile后,线程对变量的修改就是直接改的内存个中的变量了。
####################################################################################################
PSP
####################################################################################################
####################################################################################################
Mac
####################################################################################################
mac安装
什么是ktext:
http://baike.baidu.com/view/6161962.html?fromTaglist
什么是plist:program list,程序属性文件
mac相关关键字:
NULL电源
五国
无限风火轮
dsts驱动安装
/S/L/E:/System/Library/Extensions/com.apple.boot.plist
变色龙启动配置文件:Library/Preferences/SystemConfiguration/com.apple.Boot.plist
mac os启动开在ntfs volumn处:可能是使用了版本不对的IOATAFAMILY.KEXT(每个mac os版本的该文件不能通用)
####################################################################################################
泛型
####################################################################################################
在写微博解析器时,思考的泛型问题
没用泛型
public interface Parser {
public Object parse(InputStream inStream)
throws IOException, ParserException;
}
public class UserParser implements Parser {
public User parse(InputStream inStream)
throws IOException, ParserException {
// some code
return user;
}
}
public class AnotherParser implements Parser {
public Type parse(InputStream inStream)
throws IOException, ParserException {
// some code
return typeInstance;
}
}
// 用到Parser接口的地方
public WeiboApi {
// 使用Parser更通用
// UserParser的话可能也有n中实现方式
public User user_info(String url, Parser parser)
throws IOException, ParserException {
Object object = parser.parse(inStream);
// 需要手动类型转换
return (User) object;
}
}
使用泛型
public interface Parser<T> {
public T parse(InputStream inStream)
throws IOException, ParserException;
}
public class UserParser implements Parser<User> {
public User parse(InputStream inStream)
throws IOException, ParserException {
// some code
return user;
}
}
public class AnotherParser implements Parser<Type> {
public Type parse(InputStream inStream)
throws IOException, ParserException {
// some code
return typeInstance;
}
}
// 用到Parser接口的地方
public class WeiboApi {
// 在传入时,Parser<? extends User> parser = outParser;
public User user_info(String url, Parser<? extends User> parser)
throws IOException, ParserException {
// some code
User user = parser.parse(inStream);
return user;
}
}
// 基类携带上子类的类型信息
// 变量携带上子类的类型信息
突然发现被泛型搞混了
Map<String, List<String>> map = new HashMap<String, List<String>>();
// 但不可以这样
Map<String, List<String>> map = new HashMap<String, ArrayList<String>>();
// 但可以这样
Map<String, ? extends List<String>> map = new HashMap<String, ArrayList<String>>();
// 但上面的这种写法不能这样
map.put("test", new ArrayList<String>());
// 唉...再去看看泛型
List<Apple> apples = ...;
// fruits接管了一个装有Fruit子类的一个List
List<? extends Fruit> fruits = apples;
这样fruits只能get,不能add。因为要保证在apples赋给fruits后,也不应该向其中加入Orange
List<Fruit> fruits = ...;
// apples接管了一个装有Apple超类的list
List<? super Apple> apples = fruits;
因为接管的list装有的是Apple的超类,所以我们想那个list中加入Apple及子类是没问题的。但get是只能取出Object。
http://java.csdn.net/a/20110603/299216.html
List<?> -> List<? extends Object>
public interface JSONParser<T> {
public T parse(JSONObject object) throws JSONException;
}
// 实现类之User
public class UserParser1 implements JSONParser<User> {
@Override
public User parse(JSONObject object) throws JSONException {
// code 1
return user1;
}
}
public class UserParser2 implements JSONParser<User> {
@Override
public User parse(JSONObject object) throws JSONException {
// code2
return user2;
}
}
// 实现类之Message
public class MessageParser1 implements JSONParser<Message> {
@Override
public Message parse(JSONObject object) throws JSONException {
// code 1
return message1;
}
}
public class MessageParser2 implements JSONParser<Message> {
@Override
public Message parse(JSONObject object) throws JSONException {
// code2
return message2;
}
}
// 使用
JSONParser<User> parser = new UserParser1();
或者
JSONParser<User> parser = new UserParser2();
不使用泛型的话
public interface UserJSONParser {
public User parse(JSONObject object) throws JSONException;
}
public interface MessageJSONParser {
public Message parse(JSONObject object) throws JSONException;
}
// 然后分别实现两个接口
分享到:
相关推荐
Flash个人笔记.pdf
SpringMvc个人笔记.txt
这个名为"个人笔记.zip"的压缩包文件很可能包含了作者在IT领域的学习历程和心得,可能涵盖了多个主题。虽然没有具体的标签来指示笔记的具体内容,我们可以基于常见的IT知识领域进行分析。 首先,笔记可能涉及到...
人工智能个人笔记.zip
线性规划个人笔记.doc
linux个人珍藏版,欢迎下载
注册电气工程师个人笔记.doc
【标题】"paper个人笔记.zip" 是一个包含个人学习笔记的压缩文件,主要涉及深度学习领域。这个压缩包中包含了多个文档和论文,用于深入理解深度学习中的关键概念和技术。 【描述】简单的一句"paper个人笔记.zip...
《赖世雄中级英语讲课笔记》是一份宝贵的英语学习资源,由知名英语教育专家赖世雄教授...这份资料不仅是个人自学的好助手,也是教师进行课堂教学的宝贵资源。对于有志于提高英语能力的人来说,它是不容错过的一份宝藏。
斯坦福大学2014机器学习个人笔记.doc
数通初级个人资料笔记
【注册电气工程师基础考试个人笔记.zip】压缩包文件是一份精心整理的备考资源,专为准备注册电气工程师基础考试的考生提供。这份笔记涵盖了广泛的电气工程基础知识,旨在帮助考生系统地复习并掌握考试的关键点。以下...
Delphi-好记性不如烂笔头-个人笔记.pdf
[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip上位机开发VC串口学习资料源码下载[018]VC++串口通信笔记.zip...
docker个人学习笔记.pptx
这个"Node个人学习笔记.zip"压缩包包含了作者在学习Node.js过程中积累的知识点和心得,非常适合那些已经对JavaScript有基础理解并希望进一步探索后端开发的初学者。 一、Node.js基础 Node.js的核心特性是事件驱动和...
《东北大学软件学院软件需求分析与设计》笔记涵盖了软件开发过程中的关键环节,特别是需求分析与设计阶段。这个阶段是软件工程的基石,对于确保项目的成功至关重要。笔记内容可能包括以下核心知识点: 1. **需求...
机器学习个人笔记