在学习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<k> keyset()
返回此映射中所包含的键的 set 视图。
10)) collection<v> values()
返回此映射所包含的值的 collection 视图。
11)) set<map.entry<k,v>> entryset()
返回此映射所包含的映射关系的 set 视图。
1))) 获取hashmap的key和value的示例示例:
方式一
方式二
先利用 set<k> 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的继承结构
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIvwVbvNmLlR2bjlWbh1mL3d3dvw1LcpDc0RHaiojIsJye.jpg)
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流的数据加载到当前对象(内存)。
所以的数据只能在内存中操作。
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 <t extends comparable<? super t>> void sort(list<t> list)
sorts the specified list into ascending order, according to the natural ordering of its elements.
2)static <t> void sort(list<t> list, comparator<? super t> c)
sorts the specified list according to the order induced by the specified comparator.
3)static void swap(list<?> list, int i, int j)
swaps the elements at the specified positions in the specified list
4)
static <t> list<t> synchronizedlist(list<t> list)
returns a synchronized (thread-safe) list backed by the specified list.
static <k,v> map<k,v> synchronizedmap(map<k,v> m)
returns a synchronized (thread-safe) map backed by the specified map.
static <t> set<t> synchronizedset(set<t> s)
returns a synchronized (thread-safe) set backed by the specified set.
5)static <t> int binarysearch(list<? extends comparable<? super t>> 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()方法
2)使用构造器复制
arraylist(collection c);
使用的集合都有复制构造器,而且他们是浅复制。
1.compable 和comparator的区别
1)compable是对象与对象之间的比较。(equals 方法是判断当前对象和另一个对象是否内容一样;compareto方法是判断当前对象与另一个对象的大小关系)该接口用于实体类中。
2)comparator是独立存在的比较算法,该算法一般被集合调用。
2.collection和collections的区别
collection是接口,collections是集合的工具类。