本文系 www.javady.com網站原創
總接口:Iterable<T> 實現這個接口允許對象成為 "foreach" 語句的目標。
Collection<E> 層次結構 中的根接口。Collection 表示一組對象
一、 List :實現 collection接口 有序的集合 可以允許重復
ArrayList |
初始大小 |
10 |
擴容因子 |
(大小*3)/2 + 1 |
擴容例子 |
10 超過時之后擴容到 16 然后 25 然后 38... |
數據處理 |
刪除其中一個元素后后面的元素會自動向前推 |
線程是否安全 |
不安全 |
優勢 |
ArrayList的優勢在于讀取和表尾插入 |
多線程使用 |
List list = Collections.synchronizedList(new ArrayList(…)) |
LinkedList |
說明 |
List接口的鏈接列表實現 。 |
初始大小 |
1 |
數據處理 |
刪除其中一個元素后后面的元素會自動向前推,
LinkedList 中的鏈接關系是由 Entity實現的,
每個Entity都有 上一個Entity引用 下一個Entity引用
本身元素值Entry(E element, Entry<E> next, Entry<E> previous)
LinkedList 類還為在列表的開頭及結尾 get、remove 和 insert
元素提供了統一的命名方法。
此類實現 Queue 接口,為 add、poll 等提供先進先出隊列操作 |
優勢 |
LinkedList的優勢在于表中插入和刪除 |
線程是否安全 |
不安全 ,可以使用如下進行安全處理
List list = Collections.synchronizedList(new LinkedList(...)); |
Vector |
說明 |
Vector 類可以實現可增長的對象數組 |
初始大小 |
10 |
擴容因子 |
1 , 默認擴容一倍 |
擴容例子 |
10 超過時之后擴容到 20 然后 40 然后 80… |
數據處理 |
刪除其中一個元素后后面的元素會自動向前推 |
是否同步 |
Vector 是同步的 |
用法 |
一般在多線程中使用對于一般的數據存儲直接用ArrayList |
Stack |
類型解釋 |
表示后進先出(LIFO)的對象堆棧 。
它通過五個操作對類 Vector 進行了擴展 ,
允許將向量視為堆棧。
它提供了通常的 push 和 pop 操作 |
幾種方法 |
empty()
測試堆棧是否為空。
E peek()
查看棧頂對象而不移除它。
E pop()
移除棧頂對象并作為此函數的值返回該對象。
E push(E item)
把項壓入棧頂。
int search(Object o)
返回對象在棧中的位置,以 1 為基數。 |
Arrays |
說明 |
專門用來操作數組的輔助類 Array 固定個數效率最高 |
數據處理 |
Arrays中擁有一組static函數, equals(): 比較兩個array是否相等。array擁有相同元素個數,
且所有對應元素兩兩相等。 fill(): 將值填入array中。 sort(): 用來對array進行排序。 binarySearch():在排好序的array中尋找元素。 System.arraycopy():array的復制 |
優勢 |
這個就是用來處理數組的,效率特別高
如果之前對Arrays沒這么的重視,在J2SE 5.0之后,可以多關照它幾眼
。如果有數組操作方面的相關需求,可以先查查 java.util.Arrays的API文
件說明,看看有沒有現成的方法可以使用 |
二、Set :一個不包含重復元素的 collection。
HashSet |
說明 |
內部使用HashMap 來存儲數據 |
初始大小 |
16 |
擴容因子 |
數據超過當前大小*0.75 容量擴一倍 |
擴容例子 |
當前容量16 如果插入13個數 超過了(16*0.75=12)
容量增加16 最后容量是 32。 |
優勢 |
不允許有重復的元素 |
線程是否安全 |
不安全,可以使用如下進行安全處理
Set s = Collections.synchronizedSet(new HashSet(...)) |
LinkedHashSet |
說明 |
內部使用HashMap 來存儲數據 |
初始大小 |
16 |
擴容因子 |
數據超過當前大小*0.75 容量擴一倍 |
擴容例子 |
當前容量16 如果插入13個數 超過了(16*0.75=12)
容量增加16 最后容量是 32。 |
優勢 |
不允許有重復的元素 、 查詢足夠快 、 有序 |
線程是否安全 |
不安全,可以使用如下進行安全處理
Set s = Collections.synchronizedSet(new HashSet(...)) |
三、Map :一個不包含重復元素的 無序集合 鍵值對 。
HashMap |
說明 |
內部使用Entity來存儲數據,key可以為空
put方法:如果key為空,則替換換Key為空的值,
否則插入到第 O 位置上。
for (Entry<K,V> e = table[0]; e != null; e = e.next) {
//null key都放在table[0]上
if (e.key == null) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
如果key不為空,先算出來key對象的hashcode ,
然后調用函數 hash()在算一次,
最后把結果和當前hash大小進行計算找到存放該值的位置;
如果該位置有值 直接把當前值(entity)鏈接到該值最前面 ,
Entry<K,V> e = table[bucketIndex];
//這個地方獲取當前位置的 e
//table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
//這個地方把要插入的entity的next屬性指向 e,
然后把整個entity放入 hashMap的index位置,
如果沒有值就直接放入,
數組位置每變大一次 里面每個對象的位置都要重新計算一下 |
初始大小 |
16 |
擴容因子 |
數據超過當前大小*0.75 容量擴一倍 |
擴容例子 |
當前容量16 如果插入13個數 超過了(16*0.75=12)
容量增加16 最后容量是 32 |
優勢 |
查詢足夠快 |
線程是否安全 |
線程不安全 可以使用如下進行安全處理
Set s = Collections.synchronizedSet(new HashSet(...)) |
Hashtable |
初始大小 |
11 |
擴容因子 |
大小 = 大小 * 2 + 1 |
擴容例子 |
11 然后 23 然后47 .... |
是否同步 |
hashtable是同步的. |
優勢 |
查詢足夠快 |
說明 |
key 不允許為空
數據的put和get和hashMap基本上一致
里面的所有方法除了不需要同步的都有 synchronized |
LinkedHashMap |
初始大小 |
16 |
擴容因子 |
數據超過當前大小*0.75 容量擴一倍 |
擴容例子 |
當前容量16 如果插入13個數 超過了(16*0.75=12)
容量增加16 最后容量是 32 |
是否同步 |
異步線程不安全 多線程使用可以如下
Map m = Collections.synchronizedMap(new LinkedHashMap(...)) |
優勢 |
查詢足夠快的 有序 |
說明 |
鏈表的形式存儲數據 使用的hash算法保持數據,但同樣也維護了一個插入
順序查詢對象時,速度足夠快 |
TreeMap |
初始大小 |
0 |
擴容因子 |
1 |
擴容例子 |
每插入一個鍵值對,內部創建一個entity來存儲 size + 1 |
是否同步 |
異步線程不安全 多線程使用可以如下
Map m = Collections.synchronizedMap(new TreeMap(...)); |
優勢 |
能夠維護其內元素的排序狀態 |
說明 |
TreeMap 初始化為0 , 每插入一個鍵值對,內部創建一個entity來存儲
內部實現和維護的是一顆紅黑樹,遍歷的時候使用的是前序遍歷法,但是
查詢get方法的時候需要遍歷,速度不如直接使用hash算法的快 |
Properties |
初始大小 |
11 |
擴容因子 |
大小 = 大小 * 2 + 1 |
擴容例子 |
11 然后 23 然后47 .... |
是否同步 |
是同步的. |
優勢 |
查詢足夠快 可保存在流中或從流中加載數據 |
說明 |
實現了 HashTable 表示了一個持久的屬性集。
Properties 可保存在流中或從流中加載數據。
|
摘要: 今天需要把數據庫的數據導出l,然后也可以從外面導入保存到數據庫。
考慮導出的數據格式為xml或json。json的話可以用google的gson實現。
以前做過。導出為xml的話,以前都是用java拼裝或jdom或dom4j。今天
發現xstream也很強大,既可以把java對象轉化為xml,也可以從xml轉化為java
對象。專業說法,就是可以序列化為xml,也可以凡序列化為java對象...
閱讀全文
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<html xmlns="<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<meta name="keywords" content="" />
<meta name="description" content="百度地圖API自定義地圖,幫助用戶在可視化操作下生成百度地圖" />
<title>百度地圖API自定義地圖</title>
<!--引用百度地圖API-->
<style type="text/css">
html,body{margin:0;padding:0;}
.iw_poi_title {color:#CC5522;font-size:14px;font-weight:bold;overflow:hidden;padding-right:13px;white-space:nowrap}
.iw_poi_content {font:12px arial,sans-serif;overflow:visible;padding-top:4px;white-space:-moz-pre-wrap;word-wrap:break-word}
</style>
<script type="text/javascript" src=">
</head>
<body>
<!--百度地圖容器-->
<div style="width:697px;height:550px;border:#ccc solid 1px;" id="dituContent"></div>
</body>
<script type="text/javascript">
var opts = {
width : 100, // 信息窗口寬度
height: 50, // 信息窗口高度
title : "IBM中國股份有限公司" // 信息窗口標題
}
//創建和初始化地圖函數:
function initMap() {
createMap(); //創建地圖
setMapEvent(); //設置地圖事件
addMapControl(); //向地圖添加控件
}
//創建地圖函數:
function createMap() {
var map = new BMap.Map("dituContent"); //在百度地圖容器中創建一個地圖
var point = new BMap.Point(104.114129, 37.550339); //定義一個中心點坐標
map.centerAndZoom(point, 5); //設定地圖的中心點和坐標并將地圖顯示在地圖容器中
window.map = map; //將map變量存儲在全局
//向地圖添加標注
var bounds = map.getBounds();
var point = new BMap.Point(116.326655,39.902095);
var marker = new BMap.Marker(point);
var label = new BMap.Label('IBM全球總部',{"offset":new BMap.Size(9,-15)});
marker.setLabel(label);
map.addOverlay(marker);
marker.addEventListener("click", function(){this.openInfoWindow(new BMap.InfoWindow("全球總部(北京)</br>Tel:010-10000000", opts));});
var point = new BMap.Point(103.809019, 30.850669);
var marker = new BMap.Marker(point);
var label = new BMap.Label('成都分公司',{"offset":new BMap.Size(9,-15)});
marker.setLabel(label);
map.addOverlay(marker);
marker.addEventListener("click", function(){this.openInfoWindow(new BMap.InfoWindow("成都分公司</br>Tel:暫無", opts));});
var point = new BMap.Point(114.059763,22.646821);
var marker = new BMap.Marker(point);
var label = new BMap.Label('香港分公司',{"offset":new BMap.Size(9,-15)});
marker.setLabel(label);
map.addOverlay(marker);
marker.addEventListener("click", function(){this.openInfoWindow(new BMap.InfoWindow("香港分公司</br>Tel:暫無", opts));});
var point = new BMap.Point(121.323246, 31.294085);
var marker = new BMap.Marker(point);
var label = new BMap.Label('上海分公司',{"offset":new BMap.Size(9,-15)});
marker.setLabel(label);
map.addOverlay(marker);
marker.addEventListener("click", function(){this.openInfoWindow(new BMap.InfoWindow("上海分公司</br>Tel:暫無", opts));});
}
// 編寫自定義函數,創建標注
function addMarker(point, index) {
var myIcon = new BMap.Icon(" offset: new BMap.Size(10, 25), // 指定定位位置
imageOffset: new BMap.Size(0, 0 - index * 25) // 設置圖片偏移
});
var marker = new BMap.Marker(point, { icon: myIcon });
map.addOverlay(marker);
}
//地圖事件設置函數:
function setMapEvent() {
map.enableDragging(); //啟用地圖拖拽事件,默認啟用(可不寫)
map.enableScrollWheelZoom(); //啟用地圖滾輪放大縮小
map.enableDoubleClickZoom(); //啟用鼠標雙擊放大,默認啟用(可不寫)
map.enableKeyboard(); //啟用鍵盤上下左右鍵移動地圖
}
//地圖控件添加函數:
function addMapControl() {
//向地圖中添加縮放控件
var ctrl_nav = new BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE });
map.addControl(ctrl_nav);
//向地圖中添加縮略圖控件
var ctrl_ove = new BMap.OverviewMapControl({ anchor: BMAP_ANCHOR_BOTTOM_RIGHT, isOpen: 1 });
map.addControl(ctrl_ove);
//向地圖中添加比例尺控件
var ctrl_sca = new BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT });
map.addControl(ctrl_sca);
}
initMap(); //創建和初始化地圖
</script>
</html>