swzhebei

常用链接

统计

最新评论

  • 1. re: 调用百度地图小实例
  • 如果我有100个经纬度 请问,您是不是再代码里写100个?你这样没有价值,如何获取动态的请说明!
  • --toly
  • 2. re: 调用百度地图小实例
  • 更改经纬度就不行了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • --你姥姥

#

java集合详解

本文系 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 可保存在流中或从流中加载数据。

 

 

posted @ 2012-05-14 16:50 透明的鱼 阅读(293) | 评论 (0)编辑 收藏

xstream 让javabean和xml互相转换(转载)

     摘要: 今天需要把数据库的数据导出l,然后也可以从外面导入保存到数据库。 考虑导出的数据格式为xml或json。json的话可以用google的gson实现。 以前做过。导出为xml的话,以前都是用java拼装或jdom或dom4j。今天 发现xstream也很强大,既可以把java对象转化为xml,也可以从xml转化为java 对象。专业说法,就是可以序列化为xml,也可以凡序列化为java对象...  阅读全文

posted @ 2012-05-14 16:01 透明的鱼 阅读(3948) | 评论 (0)编辑 收藏

java知识

    只有注册用户登录后才能阅读该文。阅读全文

posted @ 2012-04-18 16:23 透明的鱼 阅读(14) | 评论 (0)编辑 收藏

调用百度地图小实例

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<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="http://api.map.baidu.com/api?key=&v=1.1&services=true"></script>
</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("http://api.map.baidu.com/img/markers.png", new BMap.Size(23, 25), {
            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>

posted @ 2012-04-18 16:19 透明的鱼 阅读(10091) | 评论 (2)编辑 收藏

仅列出标题
共2页: 上一页 1 2