首页 > 代码库 > Java-集合篇Map
Java-集合篇Map
1.Map 接口
实现Map接口的集合类是通过"键-值"映射的方式来存储对象的。
"键-值"映射对是通过键来唯一标识,Map底层的"键"是用Set存放的(这就保证了它的唯一性,不重复)。
将键映射到值的对象。一个映射不能包含重复的键,每个键最多只能映射到一个值。
JDK API中Map接口的实现类常用的有:1,HashMap 2, TreeMap 3,HashTable(不常用)
2.Map接口中常用的方法
Object put (Object key, Object value) ; //将指定的“键—值”对存入Map中
Object get (Object key); //通过key(键)取出所映射的值
Object remove(Object key); //根据指定的"键"将其“键-值”对从map中删除。
boolean containsKey(Object key); //判断Map是否包含指定键的“键-值”对
boolean containsValue(Object value) ;//判断Map是否包含指定值的“键-值”对
boolean isEmpty(); //判断Map是否包含元素
int size(); //获取长度
void clear(); //清空Map中的所有“键-值”对
Set keySet() ;//返回Map中所包含键的set集
Collection values(); //返回Map中所有的values的集合。
3.HashMap
HashMap内部对“键”用Set进行散列存放(HashSet),所以根据“键”去取"值"的效率很高
4.TreeMap
TreeMap内部对"键"用TreeSet的红黑树结构进行排序存放,所以放入TreeMap的"key-value"对的key
必须是可"排序"的。
5.Map.Entry 接口
Map.Entry是Map内部定义的一个接口,专门用来存放key-value的内容。
6.Collections工具类
java.util.Collections 类是操作集合的工具类,提供一些静态方法实现基于集合的一些常用算法。
void sort (List list) ;//List列表的所有元素必须都实现comparable接口,根据元素的自然顺序按升序排列
void shuffle (List list) ;//对List列表里的元素()随机排列。
void reverse(List list) ;//对List列表里的元素反转。
void copy(List dest ,List src);//src复制到dest中
List synchronizedList(List List) ;//返回指定列表支持的同步列表
7.HashTable
旧版的HashTable ,操作大多跟HashMap相同。但是它保证线程的同步。
它有一个子类Properties(属性集)比较常用:
- Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性集中每个键及其对应值都是一个字符串。
- 不建议使用put 和putAll 这类存放元素方法,应该使用setProperty(Stringkey, Stringvalue)方法,
- 因为存放的“键-值”对都是字符串。类似取值也应该使用getProperty(Stringkey)
- 不支持泛型操作
//Properties示例,根目录下要存在config.properties文件
import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropertiesTest {public static void main(String[] args) {//方法链InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("config.properties");Properties prop = new Properties();try {prop.load(is);} catch (IOException e) {e.printStackTrace();}String name = prop.getProperty("name");String pwd = prop.getProperty("pwd");System.out.println(name + ", " + pwd);}}
8.Map接口输出
对于Map接口来说,其本身是不能直接使用迭代进行输出的,因为Map中的每一个位置存放的是一对值(key?value),
而Iterator中每次只能找到一个值。所以如果非要使用迭代进行输出的话,要按照以下操作步骤完成:
- 将Map的实例通过entrySet()方法变为Set接口对象
- 通过Set接口实例为Iterator实例化
- 通过Iterator迭代输出,每个内容都是Map.Entry的对象
- 通过Map.Entry进行key?value的分离。getKey,getValue
Map大多时候用于查找,输出属于少数操作。
总结:
选择标准:
?存放要求
?无序-Set
?有序-List
?“key-value”对-Map
?读和改的效率
?Hash*-两者都最高
?Array*-读快改慢
?Linked*-读慢改快
Java-集合篇Map