標籤:
1.SparseArrays
sparseArrays是映射Integer To Objects,可參照HashMap的作用.它的目的是更省記憶體,記憶體效率更高,因為它避免了keys的自動裝箱,而且它的結構也不用依賴每一個entry-set。它內部是用二分尋找去查詢,所以不適合key很多的情況,大概在幾百個元素的情況下,比hashmap的速度慢50%以下。
類似的有SparseBooleanArray,SparseIntArray,SparseLongArray,分別是映射Integer To Boolean,Int Long.
2.ArraySet ArrayMap
與上相同,數目不大情況下代替hashmap
3.AtomicFile
就是在寫檔案的同時本地儲存了一份copy,如果寫失敗可以從備份檔案恢複。
4.AttributeSet(interface),XmlPullAttributes(class),BridgeXmlPullAttributes(class)
AttributeSet只是一個解析xml的介面,子類Resources.Theme.obtainStyledAttributes();
也可以
XmlPullParser parser = resources.getXml(myResouce); AttributeSet attributes = Xml.asAttributeSet(parser);
View Code
5.Base64,Base64InputStream,Base64OutputStream
3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式.適用於網路傳輸,加密解密.
6.ContainerHelpers
ArrayMap等中使用的二分尋找就是這貨的ContainerHelpers.binarySearch,沒有其他作用了
7.DisplayMetrics
用於擷取螢幕像素密度,low=120,mid=160,high=240...
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
8.FastImmutableArraySet
重複利用iterator,如果要遍曆數百次,效率是hashset的2.5倍。
9.FoatMath
基本不用了(效率低),類似Math的一些操作。
10.JsonReader,JsonWriter
json解析,用法
public List<Message> readJsonStream(InputStream in) throws IOException { JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8")); try { return readMessagesArray(reader); } finally { reader.close(); } } public List<Message> readMessagesArray(JsonReader reader) throws IOException { List<Message> messages = new ArrayList<Message>(); reader.beginArray(); while (reader.hasNext()) { messages.add(readMessage(reader)); } reader.endArray(); return messages; } public Message readMessage(JsonReader reader) throws IOException { long id = -1; String text = null; User user = null; List<Double> geo = null; reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("id")) { id = reader.nextLong(); } else if (name.equals("text")) { text = reader.nextString(); } else if (name.equals("geo") && reader.peek() != JsonToken.NULL) { geo = readDoublesArray(reader); } else if (name.equals("user")) { user = readUser(reader); } else { reader.skipValue(); } } reader.endObject(); return new Message(id, text, user, geo); } public List<Double> readDoublesArray(JsonReader reader) throws IOException { List<Double> doubles = new ArrayList<Double>(); reader.beginArray(); while (reader.hasNext()) { doubles.add(reader.nextDouble()); } reader.endArray(); return doubles; } public User readUser(JsonReader reader) throws IOException { String username = null; int followersCount = -1; reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (name.equals("name")) { username = reader.nextString(); } else if (name.equals("followers_count")) { followersCount = reader.nextInt(); } else { reader.skipValue(); } } reader.endObject(); return new User(username, followersCount); }View Code
* public void writeJsonStream(OutputStream out, List<Message> messages) throws IOException { * JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8")); * writer.setIndent(" "); * writeMessagesArray(writer, messages); * writer.close(); * } * * public void writeMessagesArray(JsonWriter writer, List<Message> messages) throws IOException { * writer.beginArray(); * for (Message message : messages) { * writeMessage(writer, message); * } * writer.endArray(); * } * * public void writeMessage(JsonWriter writer, Message message) throws IOException { * writer.beginObject(); * writer.name("id").value(message.getId()); * writer.name("text").value(message.getText()); * if (message.getGeo() != null) { * writer.name("geo"); * writeDoublesArray(writer, message.getGeo()); * } else { * writer.name("geo").nullValue(); * } * writer.name("user"); * writeUser(writer, message.getUser()); * writer.endObject(); * } * * public void writeUser(JsonWriter writer, User user) throws IOException { * writer.beginObject(); * writer.name("name").value(user.getName()); * writer.name("followers_count").value(user.getFollowersCount()); * writer.endObject(); * } * * public void writeDoublesArray(JsonWriter writer, List<Double> doubles) throws IOException { * writer.beginArray(); * for (Double value : doubles) { * writer.value(value); * } * writer.endArray(); * }View Code
11.LruCache
用的是LinkedHashMap<K,V>,使用強引用,最近使用的元素移到隊列的最前,所以不經常使用的元素被移出。由於弱引用回收時間不確定,LruCache更好的作為圖片緩衝.
* int cacheSize = 4 * 1024 * 1024; // 4MiB * LruCache<String, Bitmap> bitmapCache = new LruCache<String, Bitmap>(cacheSize) { * protected int sizeOf(String key, Bitmap value) { * return value.getByteCount(); * } * }}View Code
12.Patterns
寫了常用的Ip,domain,email等的Regex
13.TimeUtils
擷取時區
14.xml
xml解析
android/util中的一些常用類