天天看点

java中的Map接口前言正文  总结

在学习map接口之前,先来看看散列表的概念;本节主要讲讲map接口的实现类和集合的工具类。

这里先提一下泛型编程:通常情况下用来限制集合的存储的数据类型。在定义集合时使用<引用类型>来限制集合。其中<>的类型只为引用类型。

散列桶的目的是使用空间换时间,即它是使用索引来提高效率。

散列桶把一组数据通过散列算法,将数据分散开来;存储于连续的内存空间中(数组),将散列值作为数组的下标;如果散列值有重复的,将重复的数据放置在散列桶中。散列桶是线性表。这样就能快速通过散列值(下标)快速查找数据。

注:

1)散列表的容积率达到75%时效率最高;如果超过75%的容积率时,散列表自动扩容到原长度的2倍,重新进行散列。

2)容积率与散列桶无关,它是 (将占用key的空间)/(存储key的空间)

快速查找数据。尤其是查找大量的数据。

元素对长度取余的值,为散列值;该散列值与数组的下标做匹配;将元素存在散列表中。如果当前空间已经被占用,那么就将元素存在于散列桶中。

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。 

它的常用实现类有hashmap、hashtable、properties和treemap。

基于哈希表的 map 接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null 键。

key只能有一个为空,value可以对个null。

此实现不是同步的。

当集合在迭代的过程中,不允许map自身进行增加。删除操作,只能通过set迭代器完成。

1)api

1))public hashmap()

<dl></dl>

<dd>构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 hashmap。 </dd>

<dd></dd>

2))v put(k key, v value) 

在此映射中关联指定值与指定键。并返回放置在map的value的对象。如果key重复,直接将前一次key对应的value值覆盖掉。

3)) v get(object key) 

          返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。 

4))boolean containskey(object key) 

          如果此映射包含对于指定键的映射关系,则返回 true。 

5))boolean containsvalue(object value) 

          如果此映射将一个或多个键映射到指定值,则返回 true。 

6)) boolean isempty() 

          如果此映射不包含键-值映射关系,则返回 true 

7)) int size() 

          返回此映射中的键-值映射关系数。 

8)) v remove(object key) 

          从此映射中移除指定键的映射关系(如果存在)。  在map集合中,根据key移去key所对应的value对象,并将value作为返回值。同时释放key的内容;如果key在mmap中不存在,则返回null。

9)) set&lt;k&gt; keyset() 

          返回此映射中所包含的键的 set 视图。 

10)) collection&lt;v&gt; values() 

          返回此映射所包含的值的 collection 视图。 

11)) set&lt;map.entry&lt;k,v&gt;&gt; entryset() 

          返回此映射所包含的映射关系的 set 视图。 

1))) 获取hashmap的key和value的示例示例:

方式一

方式二

先利用 set&lt;k&gt; keyset()           返回此映射中所包含的键的 set 视图 ;再通过获取的set视图中的key来获取对应的value。

此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。此类实现一个哈希表,该哈希表将键映射到相应的值。key不可为空。

java早期版本引入的,是线程安全的。

1).为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 <code>hashcode</code> 方法和 <code>equals</code> 方法。

2).api

1))public hashtable()

用默认的初始容量 (11) 和加载因子 (0.75) 构造一个新的空哈希表。

properties 类表示了一个持久的属性集。properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

该类可以读取和写入数据到流中。

1)properties的继承结构

java中的Map接口前言正文  总结

 2)此类是线程安全的:多个线程可以共享单个 properties 对象而无需进行外部同步。

3)构造器

public properties()

创建一个无默认值的空属性列表。即默认大小为零。

4.api

1))void load(inputstream instream)

reads a property list (key and element pairs) from the input byte stream ,即把i/o流的数据加载到当前对象(内存)。

所以的数据只能在内存中操作。

java中的Map接口前言正文  总结

2))string getproperty(string key)

searches for the property with the specified key in this property list。

3))object setproperty(string key, string value)

calls the hashtable method put

4))读取配置文件信息的例子:

properties的方法只能改变已读到内存中的信息,不能直接修改文件内容(可以将修改后的数据使用输出流写到文件中);

  a red-black tree based navigablemap implementation。

note that this implementation is not synchronized.

1))treemap()

constructs a new, empty tree map, using the natural ordering of its keys.

1.collection接口和map的区别:

collection接口用来定义使用集合的接口;

而map接口用于成对放置对象的集合,key不重复,value可重复。如果key重复,后面的value覆盖前面的value。

2.实现类:

hashmap 采用散列表的算法实现

treemap 采用红黑树算法实现,利用key进行排序。

3.应用场景:

map集合适用于查找,而且是一一映射的。

同数组的工具类arrays类似,collections提供了排序、二分查找、乱序和填充等功能。

1.api

1)static &lt;t extends comparable&lt;? super t&gt;&gt; void sort(list&lt;t&gt; list)

sorts the specified list into ascending order, according to the natural ordering of its elements.

2)static &lt;t&gt; void sort(list&lt;t&gt; list, comparator&lt;? super t&gt; c)

sorts the specified list according to the order induced by the specified comparator.

3)static void swap(list&lt;?&gt; list, int i, int j)

swaps the elements at the specified positions in the specified list

4)

static &lt;t&gt; list&lt;t&gt; synchronizedlist(list&lt;t&gt; list)

returns a synchronized (thread-safe) list backed by the specified list.

static &lt;k,v&gt; map&lt;k,v&gt; synchronizedmap(map&lt;k,v&gt; m)

returns a synchronized (thread-safe) map backed by the specified map.

static &lt;t&gt; set&lt;t&gt; synchronizedset(set&lt;t&gt; s)

returns a synchronized (thread-safe) set backed by the specified set.

5)static &lt;t&gt; int binarysearch(list&lt;? extends comparable&lt;? super t&gt;&gt; list, t key)

searches the specified list for the specified object using the binary search algorithm.

1.compatable的特点

1)实现这个接口的类的实例是可以比较的,可以进行自然排序。

2)int compareto(t o)

compares this object with the specified object for order;返回值为正数时,表示大,返回值为负数时表示小,返回零表示相等。

3)comparable的实现必须与equals方法的结果一致。即comparableto方法的返回值为零时,equals方法就应该返回true。

2.comparator比较工具

用于临时定义比较的规则,而不是采用默认的比较规则

1)int compare(t o1, t o2)

compares its two arguments for order.

2)案例:计算从控制台获取的字符串的字符次数,按次数的降序输出。

java默认的复制是浅拷贝。

1)clone()方法

java中的Map接口前言正文  总结

2)使用构造器复制

arraylist(collection c);

使用的集合都有复制构造器,而且他们是浅复制。

1.compable 和comparator的区别

1)compable是对象与对象之间的比较。(equals 方法是判断当前对象和另一个对象是否内容一样;compareto方法是判断当前对象与另一个对象的大小关系)该接口用于实体类中。

2)comparator是独立存在的比较算法,该算法一般被集合调用。

2.collection和collections的区别

collection是接口,collections是集合的工具类。

继续阅读