List&Map

对于一个集合Collection,就是一个遍历(存取)和更新插入删除的操作。

(这里的存和插入是不一样的,一个是存放,一个是指定位置的插入)

1、List:ArrayList、LinkedList、Vector

ArrayList:是用Array实现的List,随机存取的时候,也就是遍历的时候,速度较快;但是不适于元素安插和移动的操作;

LinkedList:是Link实现的List,随机存取的速度适中,适于元素安插移动的操作。

故:仅仅是遍历的输出或没有其他要求存放元素时,用ArrayList;

Vector:与ArrayList类似,不同在于这个是线程安全的,写入时速度较ArrayList慢。

如果要在指定的位置插入一个元素,或者就是要删除一个元素时,用LinkedList。

2、Map:HashMap、TreeMap、LinkedHashMap、HashTable,都是存放键值对的(key/value)pairs

HashMap:它是根据键的HashCode值存储数据的,可以根据键值获取value值,具有很快的访问速度;

遍历时获取数据的顺序完全是随机的;最多只有一条记录的键值为null;不是线程安全的,即任一时刻,

可以有多个线程同时写HashMap,可能到时数据的不一致,如果需要同步,可以用

Collections的synchronizedMap方法使HashMap具有同步的功能,或者使用ConcurrentHashMap;

HashTable:与hashMap类似,不同的是,支持线程同步,不允许键值或值为空,在写入时速度较HashMap慢;

LinkedHashMap:与hashMap类似,记录了数据的插入顺序,用Iterative遍历时,先得到的数据肯定是先插入的,遍历时速度较HashMap慢;

TreeMap:实现的是SortMap接口,能够把它保存的记录根据键排序,默认的是按键值的升序排序;可以自己设置。

故:HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
LinkedHashMap 是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现。

Map部分代码:

package com.csct.test.map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;

public class TestMutilIter {

 public static void main(String[] args) {
  // HashMap
  System.out.println("------HashMap无序输出------");
  HashMap<String, String> hsMap = new HashMap<String, String>();
  hsMap.put("3", "Value3");
  hsMap.put("1", "Value1");
  hsMap.put("2", "Value2");
  hsMap.put("b", "ValueB");
  hsMap.put("a", "ValueA");
  Iterator it = hsMap.entrySet().iterator();
  while (it.hasNext()) {
   Map.Entry e = (Map.Entry) it.next();
   System.out.println("Key: " + e.getKey() + "--Value: "
     + e.getValue());
  }

  // TreeMap
  System.out.println("------TreeMap按Key排序输出------");
  TreeMap<String, String> teMap = new TreeMap<String, String>();
  teMap.put("3", "Value3");
  teMap.put("1", "Value1");
  teMap.put("2", "Value2");
  teMap.put("b", "ValueB");
  teMap.put("a", "ValueA");
  Iterator tit = teMap.entrySet().iterator();
  while (tit.hasNext()) {
   Map.Entry e = (Map.Entry) tit.next();
   System.out.println("Key: " + e.getKey() + "--Value: "
     + e.getValue());
  }

  // LinkedHashMap
  System.out.println("--LinkedHashMap根据输入的顺序输出--");
  LinkedHashMap<String, String> lhsMap = new LinkedHashMap<String, String>();
  lhsMap.put("3", "Value3");
  lhsMap.put("1", "Value1");
  lhsMap.put("2", "Value2");
  lhsMap.put("b", "ValueB");
  lhsMap.put("a", "ValueA");
  Iterator lit = lhsMap.entrySet().iterator();
  while (lit.hasNext()) {
   Map.Entry e = (Map.Entry) lit.next();
   System.out.println("Key: " + e.getKey() + "--Value: "
     + e.getValue());
  }
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值